分享

C# 属性、引用数据类型和方法参数

 印度阿三17 2019-07-24

一、属性

属性,它提供灵活的机制来读取、编写或计算某个私有字段的值。(很多同学由于学了太多的专业术语:结构体中的特征、类中的字段、属性等,有点搞不清,其实属性就是一个字段)
属性作为一个私有字段是不可被访问的,但是我们可以通过写get和set方法来实现属性的读和写。

class SX
{
	private int number;  //编号
	//当外界调用方法的时候相当于调用了number的值
    //并且外界无法对number进行操作
    public int GetNum()  //可读
    {    
		return number;
    }
	//外界通过此方法可以直接修改number的值
    //但是无法对number取值
    public void SetNum(int value)  //可写
    {
        number = value;
    }
}

但由于手写get和set方法太过麻烦,系统为我们封装了这两个方法,我们可以通过调用get访问器和set访问器来实现属性的可读性和可写性。

private string name;
//这是一个可读可写的属性
public string Name
{
	//当属性存在get、set访问器时,可以在get、set前加访问修饰符
	get
	{
		return name;
	}
	set
	{
		name = value;
	}
}
//当我们只写一个get或set属性的时候,默认另外一个private不可访问
//访问器本质上也就是方法
private int age;
public int Age
{
	set
	{
		age = value;
	}
}

只有get访问器或set访问器为私有的属性视为只读属性;只有set访问器或get访问器为私有的属性视为只写属性;两者都有的是读写属性。属性还有一种简写方式(可以省略私有字段的定义)

public string Brand { get; set;}

二、数据类型

数据类型
指针类型我们这不做考虑,只讲讲值类型和引用类型。我们平时用的枚举、结构体、整形、浮点型都是属于值类型。而我们已经学的类、数组是引用类型。这里要特别注意string类型,和多人会误以为string类型是值类型,其实不是,string类型和数组很像,它能像数组一样使用:

string str1 = "hunchuanchang";
Console.WriteLine(str1[0]);
for (int i = 0; i < str1.Length; i  )
{
	Console.Write(str1[i]   " ");
}

具体string类型怎么使用我们会在下次讲到。
值类型是在栈中分配空间,由系统自动分配;引用类型是在堆中分配空间,由程序员用“new”来分配空间。在这里我们稍微了解一下栈和堆,栈是能自动释放内存,而堆需要GC释放内存。
值类型的赋值操作,两个值类型变量相互赋值后,变量做任何操作都互不影响;引用变量在互相赋值后,修改其中一个变量两个变量都会改变。我们举个例子:

int x, y;
x = 3;
y = x;
y = 33;
Console.WriteLine(y);//y=33
Console.WriteLine(x);//x=3

int[] a = new int[1];
int[] b = new int[1];
a[0] = 3;
b = a;
b[0] = 33;
Console.WriteLine(b[0]);//b[0]=33
Console.WriteLine(a[0]);//a[0]=33

三、方法参数

在定义函数时函数名后面括号中的变量名称称为形式参数(简称形参);主调函数中调用一个函数时,函数名后面括号中的参数称为实际参数(简称实参)。形参和实参我们不做多讲,我们主要讲的是引用参数、输出参数和数组形参数。
引用参数
引用参数能让我们的值类型达到引用类型的效果,在定义参数时用ref修饰符声明
输出参数
输出参数能让我们返回多个值,只需在定义参数时用out关键字标识。它的效果与引用参数几乎相同,不同点是:
1.引用参数的实参必须是已经赋值的变量,而输出参数不必。
2.函数使用输出参数时,应该把它看作是未赋值的。
数组型参数
数组型参数必须在参数表最后,而且必须是一维数组类型,用params修饰符声明,不能和ref和out修饰符组合使用

class MyMath
{
	//以ref修饰的参数,不管是什么类型,TA都会有应用类型的特性
	public void Swap(ref int x,ref int y)
	{
		int temp = x;
        x = y;
        y = temp;
	}

    //当我们需要多个返回值的时候,我们可以使用输出参数
    //在方法中,输出参数必须要有值
	public int Cal(int a, int b, out int x, out int y, out int z)
    {
		x = a   b;
        y = a - b;
        z = a / b;
        return a * b;
    }

    //数组参数
    //数组参数不能和ref、out一起使用
    //数组参数只能在所有参数最后面
    public void Sum(params int[] arr)
    {
        int result = 0;
        for (int i = 0; i < arr.Length; i  )
        {
            result  = arr[i];
        }
        Console.WriteLine("算出结果为:", result);
    }
}

以上内容纯属个人见解,如有纰漏,轻喷。

来源:https://www./content-1-352201.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多