Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C中作为抽象类的子类#_C#_.net - Fatal编程技术网

C# C中作为抽象类的子类#

C# C中作为抽象类的子类#,c#,.net,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()

我的程序中有以下代码

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时,它构建成功,并且包含其他两个方法的错误消失了。如果子类是抽象类,则无需定义至少一个抽象方法?

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

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


只有在有一个类实现了所有必需的方法之前,才能实例化您所呈现的类层次结构—这是可以实例化的。

不,这不是必需的,因为抽象类只包含方法头是可以的,而抽象基类中的其他方法头将被继承。

如果将方法标记为
抽象
,则意味着继承它的每个(具体)类都必须提供一个实现——这是一个契约,与接口实现是契约类似


如果您还将子类标记为
抽象
,这意味着它可以将实现推迟到其子类。

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

Eh。抽象类也可以包含实现。@DigiFriend可以,但不必。它们还可以只包含方法头;)我澄清了我的帖子。但只要它没有子类,它就不应该编译对吗?此外,这将允许从其他类调用静态方法。那么拥有抽象类有什么意义呢?@user1357872很抱歉,我不理解你评论中的第一个问题,但回答最后一个问题,抽象类的意义与接口的意义非常相似——此外,你可以将一些实现写入抽象类,但不能写入接口。