代码之家  ›  专栏  ›  技术社区  ›  Mike Webb

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

  •  3
  • Mike Webb  · 技术社区  · 15 年前

    下面是一个例子。我有两个类,一个继承,两个都有一个同名的函数,但参数不同:

    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
        } 
    }
    

    我的问题是如何使基类的copy方法(my class.copy)在继承类中不可继承或不可见?我不想这样做:

    MyClass a;
    InheritedClass b;
    b.Copy(a);
    

    这是否有意义,或者我应该将此功能保留在其中?我的要求能做到吗?

    5 回复  |  直到 15 年前
        1
  •  22
  •   jgauffin    15 年前
        2
  •  6
  •   Andrew Barber Eric Lafortune    15 年前

        3
  •  4
  •   Andrew Bezzub    15 年前

    public interface MyInterface
    {
        void Copy(MyClass classToCopy)
    }
    
    public class MyClass : MyInterface
    {
        void MyInterface.Copy(MyClass classToCopy)
        {
            //copy code
        } 
    }
    
        4
  •  2
  •   Bernard    15 年前

    sealed

        5
  •  1
  •   Jamie Treworgy    15 年前

    public abstract class MyBaseClass
    {
        public MyClass()
        {
            //constructor code
        }
        protected void Copy(MyBaseClass classToCopy)
        {
            //copy code
        }
        // other methods that all inherited classes can use
    }
    
    public class MyClass: MyBaseClass
    {
        public MyClass():base()
        {
            //constructor code
        }
        public void Copy(MyClass myClassToCopy)
        {
            base.Copy(myClassToCopy);
            //specific copy code for this extensions in this class
        } 
    }
    
    public class InheritedClass : MyBaseClass
    {
        public InheritedClass():base()
        {
            //constructor code
        }
        public void Copy(InheritedClass inheritedClassToCopy)
        {
            base.Copy(myClassToCopy);
            //specific copy code for this extensions in this class
        } 
    }