日期:2014-05-17  浏览次数:20521 次

怎么样隐藏基类方法
C# code

    public abstract class myBase
    {
        public abstract void aa();
        public abstract void ac();
        public void a() { }
        public void b() { }
    }

    public class myClass : myBase
    {
        public override void aa()
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public override void ac()
        {
            throw new Exception("The method or operation is not implemented.");
        }
    }



以上代码里myClass应该有四个方法,aa(),ac(),a(),b();
这个时候,aa()和b()在myClass是无效的,怎么样隐藏这两个方法呢?
这里的隐藏不是指用new或是虚方法的override,而是要在new myClass时无法请求到隐藏的方法,类似显示实现接口的那种隐藏效果,不然每次都要标注某某方法作废...相当的麻烦呢。

------解决方案--------------------
隐藏?呵呵。

把基类的方法设为 private,子类就看不到了,当然了,子类永远也看不到了,但问题是,你在abstract类里面设 private 方法的话,有什么用?倒是可以由其它的类成员方法来调用呵……

把基类的方法设为 protected,子类可以看得到,但外面访问不到……

不知道你想干什么。你的要求,似乎不太合理。
------解决方案--------------------
子类继承父类,这个没有什么问题。
如果子类无法实现父类的一些方法,那么这个子类就是一个不合格的子类。
------解决方案--------------------
既然ab对myclass无效 myclass就不必继承 
你要把抽象类的抽象部分拿出来设计为接口 只需要继承接口就行了。。。 
当然我这么说只是针对你的这个示例, 你肯定也不是这样子的

如果情况复杂你应该考虑使用设计模式。 这种子类富于变化的 我想应该考虑下原型模式吧

------解决方案--------------------
扩展方法应该可以吧