为什么C#不允许非抽象类中的抽象方法?

时间:2014-06-20 08:46:42

标签: c# inheritance

我有一个基类,所有继承的类都以相同的方式使用“mock”方法

protected class User{
   protected void PrepareUser()
   {
      // init
   }

   protected abstract Display();
}

public class Person: User{
   // override display
}

我的问题是我当然不能在非抽象类中声明抽象方法,所以正确的OOP方法是以相同的方式触发具有Init方法的基类并强制继承的类重新实现Display方法?

3 个答案:

答案 0 :(得分:1)

首先,你可以有一个抽象类,方法实现如下:

    protected abstract class User
    {
        protected void PrepareUser()
        {
            // init
        }

        protected abstract void  Display();
    }

其次,如果不在其他类中,则不能拥有protected class。此外,基类不能比子类更容易访问。完整的工作代码应该是:

namespace MyNamespace
{
    public class XXX
    {
        protected abstract class User
        {
            protected void PrepareUser()
            {
                // init
            }

            protected abstract void  Display();
        }

        protected class Person : User
        {
            protected override void Display()
            {
                //something
            }
        }
    }
}

答案 1 :(得分:0)

  

...那么,使用Init方法触发基类的正确OOP方法总是以相同的方式触发并强制继承的类重新实现Display方法吗?

抽象类正确的方法。 E.g:

protected abstract class User{
    protected void PrepareUser()
    {
      // init
    }

    protected abstract void Display();
}

public class Person: User{
    protected override void Display()
    {
        // ...implementation...
    }
}

附注:如果User将成为public,您还需要Person public

答案 2 :(得分:0)

public abstract class User 
{
    protected void PrepareUser()
    {
       // init
    }

    protected abstract void Display();
}

public class Person : User
{
   // override display
    protected override void Display()
    {
       // Do Stuff
    }
}

上述内容是否符合您的要求?