子类作为C#中的抽象类

时间:2017-05-22 14:58:04

标签: c# .net

我的程序中有以下代码

public abstract class test
    {
        public abstract void test1();
        public abstract void test2();
       public abstract void test3();
    }
    public abstract class class1 :test
    {

      public  override void test1()
        {
            string s = "";
        }
    }

当我将我的子类的类型更改为abstract时,它成功构建,并且包含其他两种方法的错误已经消失。如果子类是抽象类,则不需要定义至少一个抽象方法吗?

4 个答案:

答案 0 :(得分:2)

如果将方法标记为 printf("Node#%d.string = '%s', .next = '%d' \n",startN->next->key, startN->next->string, startN->next->key); ^^^^^^ ^^^ ,则意味着继承它的每个(具体)类必须提供一个实现 - 它是一个与接口实现类似的合同是契约。

如果您将子类标记为public class DataAccessRegistry : Registry { public DataAccessRegistry() { For<IWidget>().Singleton().Use<DefaultWidget>(); } } ,则表示它可以将实现推迟到其子类

答案 1 :(得分:0)

它编译得很好,因为子类也是抽象

这意味着为了实例化该类型的对象,您仍然需要有一个第三类(至少)继承自您的子类并实现完整的接口(来自父类的缺少的抽象方法) )。

您提供的类层次结构在实现所有必需方法的类之前无法实例化 - 这将是可以实例化的内容。

答案 2 :(得分:0)

不,这不是必要的,因为抽象类只包含方法头,并且抽象基类中的其他方法头被继承。

答案 3 :(得分:0)

不 - 您可以在没有任何抽象方法的情况下声明类摘要。对于该类的实例存在概念上可能没有任何意义,或者您可能希望确保只能实例化该类的子类(无论出于何种原因)