浅谈c#里面的属性

**属性结合了字段和方法的多个方面。 对于对象的用户,属性显示为字段,访问该属性需要相同的语法。 对于类的实现者,属性是一个或两个代码块,表示一个 get 访问器和/或一个 set 访问器。 当读取属性时,执行 get 访问器的代码块;当向属性分配一个新值时,执行 set 访问器的代码块。 不具有 set 访问器的属性被视为只读属性。 不具有 get 访问器的属性被视为只写属性。 同时具有这两个访问器的属性是读写属性。
与字段不同,属性不作为变量来分类。 因此,不能将属性作为 ref参数或 out参数传递。
属性具有多种用法:它们可在允许更改前验证数据;它们可透明地公开某个类上的数据,该类的数据实际上是从其他源(例如数据库)检索到的;当数据被更改时,它们可采取行动,例如引发事件或更改其他字段的值。
属性在类块中是按以下方式来声明的:指定字段的访问级别,接下来指定属性的类型和名称,然后跟上声明 get 访问器和/或 set 访问器的代码块。 例如:**

public class Date
        {
            private int month = 7;  // Backing store

            public int Month
            {
                get
                {
                    return month;
                }
                set
                {
                    if ((value > 0) && (value < 13))
                    {
                        month = value;
                    }
                }
            }
        }

在此示例中,Month 是作为属性声明的,这样 set 访问器可确保 Month 值设置为 1 和 12 之间。 Month 属性使用私有字段来跟踪该实际值。 属性的数据的真实位置经常称为属性的“后备存储”。属性使用作为后备存储的私有字段是很常见的。 将字段标记为私有可确保该字段只能通过调用属性来更改。 有关公共和私有访问限制的更多信息,请参见访问修饰符。

get 访问器

get 访问器体与方法体相似。 它必须返回属性类型的值。 执行 get 访问器相当于读取字段的值。 例如,当正在从 get 访问器返回私有变量并且启用了优化时,对 get 访问器方法的调用由编译器进行内联,因此不存在方法调用的系统开销。 然而,由于在编译时编译器不知道在运行时实际调用哪个方法,因此无法内联虚拟 get 访问器。 以下是返回私有字段 name 的值的 get 访问器:

   class Person
        {
            private string name;  // the name field
            public string Name    // the Name property
            {
                get
                {
                    return name;
                }
            }
        }

当引用属性时,除非该属性为赋值目标,否则将调用 get 访问器以读取该属性的值。 例如:

   Person person = new Person();
                //...

                System.Console.Write(person.Name);  // the get accessor is invoked here

set 访问器

set 访问器类似于返回类型为 void 的方法。 它使用称为 value 的隐式参数,此参数的类型是属性的类型。 在下面的示例中,将 set 访问器添加到 Name 属性:

 class Person
        {
            private string name;  // the name field
            public string Name    // the Name property
            {
                get
                {
                    return name;
                }
                set
                {
                    name = value;
                }
            }
        }

当对属性赋值时,用提供新值的参数调用 set 访问器。 例如:

   Person person = new Person();
                person.Name = "Joe";  // the set accessor is invoked here                

                System.Console.Write(person.Name);  // the get accessor is invoked here
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值