为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

C#类中的get和set函数的具体用法

2018-01-10 6页 doc 17KB 32阅读

用户头像

is_963767

暂无简介

举报
C#类中的get和set函数的具体用法C#类中的get和set函数的具体用法 C#语言有两个函数--一个赋值函数(get),一个取值函数(set),这从它生成的中间语言代码可以清晰地 看到。C#不提倡将域的保护级别设为public而使用户在类外任意操作--那样太不OO,或者具体点说太不安 全~对所有有必要在类外可见的域,C#推荐采用属性来表达。属性不表示存储位置,这是属性和域的根本性 的区别。下面是一个典型的属性设计: using System; class MyClass { int integer; public int Integer { g...
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 MyClassDerived: 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 { if (value==null) name="Microsoft"; else name=value; } } } 由于属性的方法的本质,属性当然也有方法的种种修饰。属性也有5种存取修饰符,但属性的存取修饰往往为 public,否则我们也就失去了属性作为类的公共接口的意义。除了方法的多参数带来的方法重载等特性属性 不具备外, virtual, sealed, override, abstract等修饰符对属性与方法同样的行为,但由于属性 在本质上被实现为两个方法,它的某些行为需要我们注意。看下面的例子: abstract class A { int y; public virtual int X { get { return 0; } } public virtual int Y { get { return y; } set { y = value; } } public abstract int Z { get; set; } } class B: A { int z; public override int X { get { return base.X + 1; } } public override int Y { set { base.Y = value < 0? 0: value; } } public override int Z { get { return z; } set { z = value; } } } 这个例子集中地展示了属性在继承上下文中的某些典型行为。这里,类A由于抽象属性Z的存在而必须声明为 abstract。子类B中通过base关键字来引用父类A的属性。类B中可以只通过Y-set便覆盖了类A中的虚 属性。 静态属性和静态方法一样只能存取类的静态域变量。我们也可以像做外部方法那样,声明外部属性。
/
本文档为【C#类中的get和set函数的具体用法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索