gpt4 book ai didi

c# - 为什么 C# 允许没有抽象成员的抽象类?

转载 作者:IT王子 更新时间:2023-10-29 04:37:03 24 4
gpt4 key购买 nike

C# 规范 section 10.1.1.1 指出:

An abstract class is permitted (but not required) to contain abstract members.

这允许我创建这样的类:

public abstract class A
{
public void Main()
{
// it's full of logic!
}
}

或者更好:

public abstract class A
{
public virtual void Main() { }
}

public abstract class B : A
{
public override sealed void Main()
{
// it's full of logic!
}
}

这确实是一个具体的类;就无法实例化它而言,它只是抽象的。例如,如果我想执行 B.Main() 中的逻辑,我必须首先获得 B 的实例,这是不可能的。

如果继承者实际上不必提供实现,那么为什么称其为抽象?

换句话说,为什么 C# 允许只有具体成员的抽象类?

我应该提一下,我已经熟悉抽象类型和成员的预期功能。

最佳答案

也许一个很好的例子是一个公共(public)基类,它为派生类提供共享属性和其他成员,但不代表具体对象。例如:

public abstract class Pet
{
public string Name{get;set;}
}

public class Dog : Pet
{
public void Bark(){ ... }
}

所有的宠物都有名字,但宠物本身是一个抽象的概念。宠物的实例必须是狗或其他种类的动物。

这里的区别在于,基类没有提供应由实现者覆盖的方法,而是声明所有宠物至少由一个 Name 属性组成。

关于c# - 为什么 C# 允许没有抽象成员的抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2999944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com