知识大全 .NET中的特殊类型成员[2]

Posted 属性

篇首语:吾生也有涯,而知也无涯。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 .NET中的特殊类型成员[2]相关的知识,希望对你有一定的参考价值。

.NET中的特殊类型成员[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  属性

  许多类型定义的属性可以被重新获得或修改 这些属性常常都是用类型字段成员来实现的 例如 下面是包含有两个字段的类型定义

  class Employee

  public String Name;

  public Int Age;

  

  如果创建这个类型的实例 那么很容易用以下代码得到或设置属性

  Employee e = new Employee();

  e Name = Jeffrey Richter ; // 设置名字属性

  e Age = ; // 设置年龄属性

  Console WriteLine(e Name); // 显示 Jeffrey Richter

  用这种方式使用属性非常普通 但以我的观点看 上述代码不会向列出的那样被实现 面向对象设计和编程的立约之一便是数据抽象 它的意思就时类型字段不能用公共字段暴露出来 因为它太容易被修改 太容易让人写出不恰当地使用这个字段的代码 从而破坏对象的状态 例如 某人很容易编写下面的代码破坏Employee对象

  e Age = ; //人的年龄怎么会是 呢?

  所以说 在设计类型时 我强烈建议所有字段都是私有的(private)或至少是受保护的(protected)——决不要公共的(public) 然后 让使用类型的人能Get或Set属性 专门为此提供方法 打包对字段的访问的方法就叫做存取器(或访问器方法)方法 这些方法能随时实现完整性检查并保证对象的状态不被破坏 例如 我重写了前面定义过的Employee类 代码如图一 虽然这是一个简单的例子 但你能从中明白抽象数据字段的巨大好处 你还能从中明白如何轻松实现只读属性 或者仅仅通过不去实现某个存取器方法来轻松达到只写属性

  显示的数据抽象方法有两个缺点 第一 因为要实现附加的函数 所以要多写一些代码 第二 类型的使用者现在必须要调用方法而不是仅仅引用单个的字段名

  e SetAge( ); // Updates the age

  e SetAge( ); // Throws an exception

  我想 所有的人都会同意这些缺点与其优点比起来显得微不足道 但运行时仍然提供了一种属性机制 多少使得第一个缺点容易忍受了 并且完全消除了第二个缺点

  类使用了属性 其功能和上面所示的类相同 正如你所看到的 属性简化了一些代码 但更重要的是允许调用这项下面一样写自己的代码

   Age = ; // 更新年龄

  e Age = ; // 掷出异常Throws an exception

  Get属性存取器的返回值和传递到Set属性存取器参数值类型相同 Set属性存取器的返回值是void 而Get属性存取器没有入口参数 属性可以是静态的 虚拟的 抽象的 内部的 私有的 保护的或公共的 另外 属性可以在接口中定义 关于这一点将在后面讨论

  我还应该指出属性不必于字段关联 例如 类型System IO FileStream定义了一个长度属性 它返回流中的字节数 当长度属性的Get方法被调用时 这个长度不是由字段提供 而是调用另一个函数请求底层操作系统返回打开文件流的字节数

  当你创建属性时 编译器实际上发出专门的get_ProName和/或set_ProName存取器方法(这里ProName是属性名) 大多数编译器会理解这些专用方法并允许开发人员存取这些有专门属性语法的方法 但是 遵守公共语言运行时规范的编译器不需要完全支持属性 只要支持专用存取方法调用即可

  另外 对于完全支持属性的编译器来说 在定义和使用属性时使用的语法稍有不同 例如带受管扩展的C++需要使用_property关键字

cha138/Article/program/net/201311/15661

相关参考

知识大全 .NET中的特殊类型成员[1]

.NET中的特殊类型成员[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文我们将考察类型

知识大全 .NET中的特殊类型成员[3]

.NET中的特殊类型成员[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  索引属性  某些类

知识大全 ASP.NET入门教程 4.2.3 成员关系[2]

ASP.NET入门教程4.2.3成员关系[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 ASP.NET入门教程 4.2.3 成员关系[1]

ASP.NET入门教程4.2.3成员关系[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 C# .Net中的类型转换

C#.Net中的类型转换  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  装箱拆箱还是别名  许多

知识大全 C# .Net中的类型之间的转换

C#.Net中的类型之间的转换  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    装箱拆箱还是别

知识大全 论.net命名规范

  用Pascal规则来命名方法和类型(笔者注:单词首字母大写)  >  用Camel规则来命名局部变量和方法的参数(笔者注:首单词小写其余单词首字母大写笔者使用此方式命名成员变量)    >  所有

知识大全 构造和析构成员函数

    类有一个特殊的成员函数叫做构造成员函数它通常用于初始化类的数据成员在创建对象时会自动调用类的构造成员函数Java中的构造成员函数必须与该类具有相同的名字另外构造成员函数一般都应用public类

知识大全 C#类型成员样式

C#类型成员样式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  静态成员  

经济一体化可以分为各种类型,其中的一种类型是__,在这种类型下,各成员国只是相互免征关税,以保证商品在各成员国之间

经济一体化可以分为各种类型,其中的一种类型是_____,在这种类型下,各成员国只是相互免征关税,以保证商品在各成员国之间的自由流动。A、经济联盟B、共同市场C、自由贸易区D、关税同盟答案:C解析:根据