如何在C#中创建公共但不可继承的方法或属性?

Mik*_*ebb 3 c# inheritance abstraction

这是一个例子.我有两个类,一个继承,并且都有一个具有相同名称但不同参数的函数:

public class MyClass
{
    //public class members

    public MyClass()
    {
        //constructor code
    }

    public void Copy(MyClass classToCopy)
    {
        //copy code
    } 
}

public class InheritedClass : MyClass
{
    //public class members

    public InheritedClass():base()
    {
        //constructor code
    }

    public void Copy(InheritedClass inheritedClassToCopy)
    {
        //copy code
    } 
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何使基类的复制方法(MyClass.Copy)在InheritedClass中不可继承或不可见?我不想这样做:

MyClass a;
InheritedClass b;
b.Copy(a);
Run Code Online (Sandbox Code Playgroud)

这是否有意义,或者我应该保留此功能吗?我甚至可以要求做什么?

Ree*_*sey 22

这是否有意义,或者我应该保留此功能吗?我甚至可以要求做什么?

试图在基类使用时隐藏这样的公共方法是有问题的.你故意试图违反Liskov替代原则.

替代文字

  • 希望你不介意我添加了激励海报;) (11认同)
  • 我偷了这个形象!**编辑**我的意思是,当然,我正在下载并以完全符合相关许可协议的方式存储它以供重复使用.:P (3认同)

And*_*ber 6

你不能做你想做的事情; C#不允许继承成员出现负差异.(实际上几乎没有语言真正做到)

但是,你可能根本不想要一个继承的类.你真正想要的是一个界面.或者......你的两个班级可能没有正确的关系; 或许他们都应该成为第三类的共同兄弟,这是他们的父母.