none
可以隐藏一个父类的属性或者不允许子类继承某个属性么? RRS feed

  • 问题

  • 类似这样

    public class test{
      public static string name;
      public string value;
    }
    
    public class test2:test{
    
    }
    
    想要使用test2的时候不能直接访问 test.name; 因为这个属性是唯一的不想子类随便访问这个
    2010年5月23日 17:07

答案

  • 设置为private 就可以了。

    不过貌似静态的是不会被继承的吧。你这么写不仅仅是test2可以访问,其他类都可以通过test.name来访问这个静态成员。

     


    family as water
    2010年5月24日 1:42
  • 给个思路:

    写成属性,然后在读写的时候加上类型判断(对this判断即可),如果是当前类(test),则正常操作,否则抛错误或者返回空值。

    不过这个是static的,上面的用不了,只能private了


    霸王
    2010年5月24日 5:03
  • 从 C# 语言本身的规范来讲。不可以。

    派生类一定会继承父类的非私有 (private) 成员,即:受保护 (protected)、公有 (public) 以及内部 (internal)。如果父类的某一成员对外可见 (非私有),则一定会被继承。这也就是对象的继承性的体现。

    为了保护对象继承性,C# 不允许派生类隐藏,或者修改父类可见成员的访问级别。


    Mark Zhou
    2010年5月24日 9:23

全部回复

  • 设置为private 就可以了。

    不过貌似静态的是不会被继承的吧。你这么写不仅仅是test2可以访问,其他类都可以通过test.name来访问这个静态成员。

     


    family as water
    2010年5月24日 1:42
  • 给个思路:

    写成属性,然后在读写的时候加上类型判断(对this判断即可),如果是当前类(test),则正常操作,否则抛错误或者返回空值。

    不过这个是static的,上面的用不了,只能private了


    霸王
    2010年5月24日 5:03
  • 从 C# 语言本身的规范来讲。不可以。

    派生类一定会继承父类的非私有 (private) 成员,即:受保护 (protected)、公有 (public) 以及内部 (internal)。如果父类的某一成员对外可见 (非私有),则一定会被继承。这也就是对象的继承性的体现。

    为了保护对象继承性,C# 不允许派生类隐藏,或者修改父类可见成员的访问级别。


    Mark Zhou
    2010年5月24日 9:23