有谁能够将C#类中的get 和set 函数的具体用法说透一点呀?我在C#的属性中使用了get 和se

发布时间:2021-02-25 09:37:49

有谁能够将C#类中的get 和set 函数的具体用法说透一点呀?我在C#的属性中使用了get 和set 函数,但是我看不出它的具体作用体现在哪!谁能将它说得清楚一点啊!

网友回答

C#语言有两个函数--一个赋值函数(get),一个取值函数(set),这从它生成的中间语言代码可以清晰地看到.C#不提倡将域的保护级别设为public而使用户在类外任意操作--那样太不OO,或者具体点说太不安全!对所有有必要在类外可见的域,C#推荐采用属性来表达.属性不表示存储位置,这是属性和域的根本性的区别.下面是一个典型的属性设计:
using System;
class MyClass
{int integer;
public int Integer
{get {return integer;}
set {integer=value;}
}}class Test
{public static void Main()
{MyClass MyObject=new MyClass();
Console.Write(MyObject.Integer);
MyObject.Integer++;
Console.Write(MyObject.Integer);
}}一如我们期待的那样,程序输出0 1.我们可以看到属性通过对方法的包装向程序员提供了一个友好的域成员的存取界面.这里的value是C#的关键字,是我们进行属性操作时的set的隐含参数,也就是我们在执行属性写操作时的右值.
属性提供了只读(get),只写(set),读写(get和 set)三种接口操作.对域的这三种操作,我们必须在同一个属性名下声明,而不可以将它们分离,看下面的实现:
class MyClass
{private string name;
public string Name
{ get { return name; }
}public string Name
{ set { name = value; }
}}上面这种分离Name属性实现的方法是错误的!我们应该像前面的例子一样将他们放在一起.值得注意的是三种属性(只读,只写,读写)被C#认为是同一个属性名,看下面的例子:
class MyClass
{protected int num=0;
public int Num
{set {num=value;
}}}class MyClass
Derived:MyClass{new public int Num
{get {return num;
}}}class Test
{public static void Main()
{MyClassDerived MyObject = new MyClassDerived();
//MyObject.Num= 1; //错误 !
((MyClass)MyObject).Num = 1;
}}我们可以看到MyClassDerived中的属性Num-get{}屏蔽了MyClass中属性Num-set{}的定义.
当然属性远远不止仅仅限于域的接口操作,属性的本质还是方法,我们可以根据程序逻辑在属性的提取或赋值时进行某些检查,警告等额外操作,看下面的例子:
class MyClass
{private string name;
public string Name
{ get { return name; }
set
以上问题属网友观点,不代表本站立场,仅供参考!