`
isiqi
  • 浏览: 16706813 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

c#属性

阅读更多

本节课将介绍C#的属性,其目的包括:
1.理解什么是属性

2.如何实现属性

3.创建一个只读属性

4.创建一个只写属性

属性是C#中独具特色的新功能。通过属性来读写类中的域,这具有一定的保护功能。在其它语言中,这是通过实现特定的getter和setter方法来实现的。C#的属性具有保护功能,可以让你就象访问域一样访问属性。要了解属性的用法,我们先来看看如何用传统的方法对域进行封装。

1.清单 10-1. 传统的访问类的域的例子:ACCESSors.cs
1usingSystem;
2publicclassPropertyHolder
3{
4privateintsomeProperty =0;
5publicintgetSomeProperty()
6{
7returnsomeProperty;
8}

9publicvoidsetSomeProperty(intpropValue)
10{
11someProperty =propValue;
12}

13}

14
15publicclassPropertyTester
16{
17publicstaticintMain(string[] args)
18{
19PropertyHolder propHold =newPropertyHolder();
20propHold.setSomeProperty(5);
21Console.WriteLine("Property Value: {0}", propHold.getSomeProperty());
22return0;
23}

24}


说明

1.清单 10-1 演示了用传统方法访问类的域的例子。

PropertyHolder类有个我们感兴趣的域someProperty, PropertyHolder类带有两个方法:getSomeProperty和setSomeProperty。getSomeProperty方法返回someProperty域的值。SetSomeProperty方法设置域someProperty的值。

2.类PropertyTester使用类PropertyHolder中的方法来获取someProperty域的值。

Main方法中新创建了一个PropertyHolder对象,之后通过使用setSomeProperty方法,调用propHold对象的setSomeProperty方法,设置其值为5。之后,调用Console.WriteLine方法输出属性值。对propHold对象的getSomeProperty的调用,是用来获取属性值的。它输出"Property Value: 5"到控制台。

3.这种传统的访问域的信息的方法是很好的,因为它支持面向对象的封装的概念。

如果在对域someProperty的实现中,域的类型从int 类型变为byte类型,上述的方法仍然适用。现在,如果采用属性的话,其实现会做得更为平滑。

2.清单 10-2. 使用属性访问类的域:Properties.cs
1usingSystem;
2publicclassPropertyHolder
3{
4privateintsomeProperty =0;
5publicintSomeProperty
6{
7get
8{
9returnsomeProperty;
10}

11set
12{
13someProperty =value;
14}

15}

16}

17
18publicclassPropertyTester
19{
20publicstaticintMain(string[] args)
21{
22PropertyHolder propHold =newPropertyHolder();
23propHold.SomeProperty =5;
24Console.WriteLine("Property Value: {0}", propHold.SomeProperty);
25return0;
26}

27}


说明


1.清单 10-2 演示了如何创建和使用属性。

PropertyHolder类中有个"SomeProperty" 属性的实现。注意:属性名的首字母必须大写,这是属性名"SomeProperty"和域名"someProperty"的唯一区别。属性有两种访问操作:get和set。Get访问操作返回的是someProperty域的值。Set访问操作是设置someProperty域的值,其值为"value"的内容。Set访问符号后面的"value"是C#中的保留字。通常,在其他场合下使用"value"关键字会出错。。

2.PropertyTester 类使用PropertyHolder类中的SomeProperty属性。

在Main方法的第一行中, 创建了PropertyHolder对象propHold。之后,把propHold对象的 someProperty 域的值设置为5,很简单,就象对域赋值一样,给属性赋值。

3.Console.WriteLine方法输出 propHold对象的someProperty域的值。

这是通过使用propHold对象的SomeProperty属性来完成的。很简单,就象对域赋值一样,赋值给属性。属性可以设置为只读的,这可以通过在属性的实现中只设一个get访问符号来实现。

3.清单 10-3. 只读属性: ReadOnlyProperty.cs
1usingSystem;
2publicclassPropertyHolder
3{
4privateintsomeProperty =0;
5publicPropertyHolder(intpropVal)
6{
7someProperty =propVal;
8}

9publicintSomeProperty
10{
11get
12{
13returnsomeProperty;
14}

15}

16}

17
18publicclassPropertyTester
19{
20publicstaticintMain(string[] args)
21{
22PropertyHolder propHold =newPropertyHolder(5);
23Console.WriteLine("Property Value: {0}", propHold.SomeProperty);
24return0;
25}

26}


说明


1.清单10-3 演示了如何实现只读属性。

PropertyHolder类中,SomeProperty 属性只有一个get访问操作,没有用到set访问操作。PropertyHolder类中还有个接受整型参数的构造函数。

2.在PropertyTester类的Main方法中,创建了新名为propHold的PropertyHolder类的对象。

propHold对象在实例化时,调用了带参数的PropertyHolder构造函数。在本例中,参数值为5,这对propHold 对象的someProperty域的值进行了初始化。

3.因为PropertyHolder 类的SomeProperty属性是只读的,所以没有其他的方法来设置someProperty域的值。

如果你插入了"propHold.SomeProperty = 7"语句到程序清单中,该程序编译将不会通过,因为SomeProperty是只读属性。在Console.WriteLine 方法中使用SomeProperty属性时,程序执行正常。这是因为该方法调用了SomeProperty属性的get访问操作,这是个只读操作。

4.清单 10-4. 只写属性: WriteOnlyProperty.cs
1usingSystem;
2publicclassPropertyHolder
3{
4privateintsomeProperty =0;
5publicintSomeProperty
6{
7set
8{
9someProperty =value;
10Console.WriteLine("someProperty is equal to {0}", someProperty);
11}

12}

13}

14
15publicclassPropertyTester
16{
17publicstaticintMain(string[] args)
18{
19PropertyHolder propHold =newPropertyHolder();
20propHold.SomeProperty =5;
21return0;
22}

23}


说明

1.清单 10-4 演示了如何创建和使用只写属性。

这一次,在PropertyHolder类中的SomeProperty属性中,去掉了get访问操作,而加上了set访问操作。其功能是输出someProperty域的值。

2.在PropertyTester 类中的Main方法中,用缺省的构造函数对PropertyTester类进行初始化。

之后,使用propHold 对象的SomeProperty属性,设置该域的值为5。这就调用了propHold 对象的set访问操作, 把someProperty 域的值设置为5,最后,把"someProperty is equal to 5"的信息输出到控制台。

小结
现在,你已经了解了什么是属性,以及属性的使用方法,你也了解了使用属性和使用传统的类的方法之间的区别。属性可以是只读的,也可以是只写的,每种场合下的使用方法,你都有所了解。

分享到:
评论

相关推荐

    C#属性排序 List Dictionary

    C# 多个属性排序 List Dictionary 升序降序 可以同时包含升序降序 一个类中 按属性A降序 ,然后按属性B升序 ,最后按照属性C降序

    C# 属性器生成器 直接生成多个属性器

    C# 属性器生成器,可以快速的生成属性器,私有和公有 输入代码: name:string,pass:string,age:int则,生成代码: #region 属性器(3个) 由"NET HELPER"自动生成 private string _name; private string _pass; ...

    C# 属性练习 属性

    在C#编程语言中,属性(Properties)是类的一个重要组成部分,它们提供了访问类中私有数据成员的机制。属性可以被理解为类的公共接口,允许外部代码以受控的方式读取或设置私有变量的值。这样做既保证了数据的安全性...

    C# 属性批量生成工具-

    在使用“C#属性批量生成工具”时,通常会有一个用户界面,允许用户指定属性的数量、类型、名称以及其他特性,如访问修饰符(public、private等)、是否为只读或只写、是否包含默认值、是否需要进行数据验证等。...

    C#属性的几个经典例子(源代码)C#属性的几个经典例子(源代码)

    下面将详细探讨C#属性的几个经典例子及其相关知识点。 1. **自动属性(Auto-Implemented Properties)** 在C#中,简单的属性可以通过自动属性快速定义。例如: ```csharp public class Student { public string...

    c# 属性(在C#中为什么要用属性,他的好处是什么)

    c#中为什么要用属性,1、在给一个对象附值时,可以通过属性SET方法,对这个值进行一个过滤,看这个值服不服合属性的要求。2、有的对象的属性,需要只读的的,就可以省去SET方法,有的是只写的,就可以省去GET方法。 ...

    C#属性及类的简单实用

    C#属性及类的简单实用

    c#属性全面探讨(代码+注释)

    C#属性是面向对象编程中的一个关键特性,它允许我们以一种安全且封装良好的方式来访问和设置类的成员变量。在C#中,属性提供了一种语法糖,使得我们可以通过简洁的get和set访问器来操作私有字段,从而提高了代码的...

    LanguageFeatureso-简化C#属性——使用自动实现的属性

    简化C#属性——使用自动实现的属性的源码,主要是为了方便大家的学习。属性值的读取和设置就像对一个常规字段进行操作一样。使用属性要比使用字段更好,因为你可以修改get块和set块中的语句,而不需要修改依赖于这个...

    c# 属性字段生成工具2011-09-01

    c# 属性字段生成工具 可以有空格; 2011-09-01日上传; vs2008自带的一次只能封装一个字段; 我们可以先把字段写出来;生成后再粘回去;

    c#属性查询的一点东西,有关supermap

    本文将深入探讨C#中的属性查询在SuperMap环境中的运用,旨在为初学者提供一个清晰的起点。 首先,理解SuperMap的基础概念至关重要。SuperMap是一款功能强大的GIS(地理信息系统)软件,它提供了丰富的地图操作、...

    C#属性中创建学生类和主方法

    C#属性中创建学生类和主方法

    C# 自定义属性编辑器(UITypeEditor )

    在.NET框架中,C#提供了一种强大的机制,允许开发者扩展IDE(如Visual Studio)的属性编辑器功能,这就是UITypeEditor。通过自定义UITypeEditor,我们可以为控件、类或其他类型的属性创建定制的编辑界面,使得在设计...

    c#属性和方法

    在C#中,属性和方法是面向对象编程的重要组成部分,它们定义了类的行为和特性。 属性(Property)是C#中用于封装类的私有变量的一种机制,它提供了对数据的安全访问。属性允许我们在类的外部通过getter和setter方法...

    c# propertyGrid 属性显示为中文,支持下拉菜单选择文本

    在C#中,我们可以利用自定义特性(Attributes)来控制属性的显示方式和内容。例如,使用`DisplayNameAttribute`可以指定属性的显示名称,而`DescriptionAttribute`可以提供属性的描述性文本。 对于显示中文,我们...

    C#的属性,数据格式大全

    在本篇文章中,我们将深入探讨C#属性的概念、用法以及数据格式的相关知识。 一、C#属性 1. 基本语法: ```csharp public 数据类型 属性名 { get { return 字段名; } set { 字段名 = value; } } ``` 这里的`数据...

    C#编写的属性面板 源码

    "C#编写的属性面板 源码"是指一个使用C#实现的属性面板控件的源代码,这个控件通常用于展示和编辑对象的属性。属性面板在许多应用程序中非常常见,比如Visual Studio的设计器,它允许开发者直观地修改对象的属性。 ...

    C#数据实体类中如何给属性赋值

    ### C# 数据实体类中如何给属性赋值 在C#开发中,处理数据库查询结果时,经常需要将查询结果映射到实体类中。本文将详细介绍如何在C#的数据实体类中为属性赋值,特别是当从数据库中取出的是一个`DataSet`对象时。 ...

    C#中使用属性控件添加属性窗口.doc

    在C#编程中,属性控件(PropertyGrid)是一个非常实用的组件,它允许开发者创建类似于Visual Studio属性窗口的界面,用于展示和编辑对象的属性。这个控件可以帮助用户直观地查看和修改对象的公共属性,极大地提高了...

Global site tag (gtag.js) - Google Analytics