C#中限制访问器可访问性

  • get 属性访问器用于返回属性值,而 set 访问器用于分配新值。这些访问器可以具有不同的访问级别。
  • value 关键字用于定义由 set 访问器分配的值。
  • 仅当属性或索引器同时具有 set 和 get 访问器时,才能使用访问器修饰符。这种情况下,只允许对其中一个访问器使用修饰符。
  • 如果对访问器使用访问某个修饰符,则访问器的可访问性域由该修饰符确定。
  • 如果不对访问器使用访问修饰符,则访问器的可访问性域由属性或索引器的可访问性级别确定。

以下是MSDN中的例子:

    public class BaseClass
    {
        private string name = "Name-BaseClass";
        private string id = "ID-BaseClass";

        public string Name
        {
            get { return name; }
            set { }
        }

        public string Id
        {
            get { return id; }
            set { }
        }
    }

    public class DerivedClass : BaseClass
    {
        private string name = "Name-DerivedClass";
        private string id = "ID-DerivedClass";

        new public string Name
        {
            get
            {
                return name;
            }

            // Using "protected" would make the set accessor not accessible. 
            set
            {
                name = value;
            }
        }

        // Using private on the following property hides it in the Main Class.
        // Any assignment to the property will use Id in BaseClass.
        new private string Id
        {
            get
            {
                return id;
            }
            set
            {
                id = value;
            }
        }
    }

    class MainClass
    {
        static void Main()
        {
            BaseClass b1 = new BaseClass();
            DerivedClass d1 = new DerivedClass();

            b1.Name = "Mary";
            d1.Name = "John";

            b1.Id = "Mary123";
            d1.Id = "John123";  // The BaseClass.Id property is called.

            System.Console.WriteLine("Base: {0}, {1}", b1.Name, b1.Id);
            System.Console.WriteLine("Derived: {0}, {1}", d1.Name, d1.Id);

            // Keep the console window open in debug mode.
            System.Console.WriteLine("Press any key to exit.");
            System.Console.ReadKey();
        }
    }
    /* Output:
        Base: Name-BaseClass, ID-BaseClass
        Derived: John, ID-BaseClass
    */

当访问派生类DerivedClass中的Name成员时,由于DerivedClass中Name方法是public的,所以能够直接使用get方法;
当访问Id成员时,由于DerivedClass中Id方法是private的,所以会调用基类中的Id方法。
则会输出如下:

Base: Name-BaseClass, ID-BaseClass
Derived: John, ID-BaseClass

当修改DerivedClass中Name方法为限制类型时,同样会调用基类中的Name方法。
输出如下:

Base: Name-BaseClass, ID-BaseClass
Derived: Name-BaseClass, ID-BaseClass

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值