[英]C# inheritance calling derived class functions from parent class
我的A类课程太长了。 因此,我决定将其某些功能移至B类。我已使B从A继承。
现在A中有函数,B中需要函数。我的问题是我应该在哪里实例化类A中的类B。我不能在类A构造函数中实例化,因为类B将调用基类以创建永不结束的循环。
我只希望类B实例化一次,因为类A构造函数的对象只想初始化一次。
我什至不确定现在是否有意义。
继承被严重滥用。 特别是在您的情况下,您更希望使用组合而不是继承 。
base关键字使您可以访问超类(基类): http : //msdn.microsoft.com/zh-cn/library/hfw7t1ce (v=vs.71) .aspx
但是:如果您只关心类的长度,则使用部分类可能是更好的解决方案( http://msdn.microsoft.com/zh-cn/library/wa80x488(v=vs.80).aspx )。 您可以将您的课程分为多个文件。 显然,您现在所做的不是继承的意图和意义。
首先,当班级太长时,定义一个新班级不是最佳实践。 如果所有功能在逻辑上都与同一个对象相关,则无论它有多长,您都可以将其保留在同一类中。
如果只想实例化一次B,则应将其设为静态类。 您可以在这里找到有关静态类的更多信息: http : //msdn.microsoft.com/zh-cn/library/79b3xss3(v=vs.80).aspx
如果在A
中使函数抽象(这也必须使A
抽象),则只需像通常那样从A
的方法中调用这些方法。 然后使用所需的逻辑覆盖B
的抽象函数。 当用户实例化B
类时,即使保存实例的变量的编译时类型为A
这些调用也将转换为B
调用。
仅当存在真正的“是”关系时,才应使用继承。 对我来说,听起来您正在描述B类需要的功能。 也许B“具有-a” A,所以您应该考虑使用组合而不是继承:
public class B
{
private A a;
public B(A a)
{
this.a = a;
}
public void UseAFunction()
{
a.MyFunction();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.