C# 抽象类与非抽象类派生的区别
在OOP中,我看到很多类都是从父类派生的,但是父类没有标记为抽象类。当类被标记为抽象时,这有什么好处C# 抽象类与非抽象类派生的区别,c#,oop,C#,Oop,在OOP中,我看到很多类都是从父类派生的,但是父类没有标记为抽象类。当类被标记为抽象时,这有什么好处 感谢抽象类本身无法实例化;它必须从中派生才能实例化。从本质上讲,类的抽象定义表明它不打算被实例化为自身,而获取其实例的唯一方法是从该类继承,并实例化继承的类。抽象类不能被自身实例化;它必须从中派生才能实例化。从本质上讲,类的抽象定义表明它不打算被实例化为自身,而获取它的实例的唯一方法是从该类继承,并实例化继承的类。编译器不允许您实例化它的事实?编译器不允许您实例化它的事实?区别真的很实用:抽象基
感谢抽象类本身无法实例化;它必须从中派生才能实例化。从本质上讲,类的抽象定义表明它不打算被实例化为自身,而获取其实例的唯一方法是从该类继承,并实例化继承的类。抽象类不能被自身实例化;它必须从中派生才能实例化。从本质上讲,类的抽象定义表明它不打算被实例化为自身,而获取它的实例的唯一方法是从该类继承,并实例化继承的类。编译器不允许您实例化它的事实?编译器不允许您实例化它的事实?区别真的很实用:抽象基类是永远不会被实例化的,因此不必提供完整的实现。这意味着ABC可以为派生类定义契约,而无需实现该类 这在两个方面很方便:
- 您可以定义没有完整实现但对整个类进行断言的抽象对象。其中的一个例子是使用一个DrawItem类和一个
方法,该方法是Circle、Rectangle等的基类。DrawItem不知道如何绘制自己,因为它不知道它是什么draw()
- 您可以定义有两个具体实现的类。这将显示在代理模式中,并且还可以用于构建(例如)用于测试的模拟对象
现在,新语言为这些东西定义接口、模块或混音更为常见;事实证明,对于那些更直观的概念,使用ABC几乎总是属于用例。区别确实非常实用:抽象基类是一个永远不会被实例化的类,因此不必提供完整的实现。这意味着ABC可以为派生类定义契约,而无需实现该类 这在两个方面很方便:
- 您可以定义没有完整实现但对整个类进行断言的抽象对象。其中的一个例子是使用一个DrawItem类和一个
方法,该方法是Circle、Rectangle等的基类。DrawItem不知道如何绘制自己,因为它不知道它是什么draw()
- 您可以定义有两个具体实现的类。这将显示在代理模式中,并且还可以用于构建(例如)用于测试的模拟对象
<保罗>关于java的文章,但我发现他的建议至少适用于大多数的任何面向对象设计任务(尽管在编码上我仍然偶尔偏离它,它在我的设计中是活的,而且很好的);即使我在C++、Python或任何东西中实现它。如果在阅读了Paul的推理之后,你发现自己同意他的观点,那么将来你将使用更多的抽象类(允许子类化;-)。举一个我认为相关的例子:
public abstract class CustomSocket()
{
CustomSocket()
{
}
public abstract void PleaseOverideMe(CustomSocketConnection c)
{
}
}
举一个我认为相关的例子:
public abstract class CustomSocket()
{
CustomSocket()
{
}
public abstract void PleaseOverideMe(CustomSocketConnection c)
{
}
}
将一个类称为“抽象”本质上是向您的程序员同伴传达它是不完整的:他们需要编写更多的代码才能利用它
在函数式编程中,函数的部分应用实际上是并行的…调用类“抽象”本质上是向您的程序员同伴传达它是不完整的:他们需要编写更多的代码才能利用它
在函数编程中,函数的部分应用实际上是并行的…这就像说-iv'e走到这一步-这完全取决于你自己!(现在我明白你的经期了。)这就像说——我们走到这一步——这完全取决于你自己!(现在我明白你的经期了。)