【发布时间】:2018-01-04 01:27:39
【问题描述】:
在我开始之前,我想声明我意识到这不是这样做的理想方式。但是调用类不能根据分配规则改变。我试图理解并找到解决这个问题的方法,但我没有运气。
下面有1个超类,TreeMangement(这些子类只能有1个超类)。有3个子类(苹果、橙子和香蕉)。 “find”方法必须在 TreeMangement 超类中。我不允许覆盖“查找”方法。使用当前代码,我将在调用类中遇到转换错误。它将声明 TreeMangement 不能隐式转换为 AppleTree、OrangeTree 或 BananaTree。
现在我的问题是,无论是什么类型(Apple、Banana、Orange)调用它,我是否能够以某种方式将正确的类型传递回调用类,而无需在调用类中进行转换?如果是这样,怎么做?如果没有,请参考,所以我知道绝对没有办法做到这一点。
public class TreeMangement
{
public string id {get; set;}
public TreeMangement()
{
id = this.GetType().Name+"|"+Guid.NewGuid();
}
public static TreeMangement Find(string idIn)
{
string type = idIn.Split('|')[0];
return Functions.GetObj(idIn, GetFilePath(type), type); //returns back the right type
}
}
public class AppleTree:TreeMangement
{
public string Name;
}
public class OrangeTree:TreeMangement
{
public string Name;
}
public class BananaTree:TreeMangement
{
public string Name;
}
///////Calling class////
AppleTree savedAppleTree = AppleTree.Find("SomeValidID");
OrangeTree savedOrangeTree = OrangeTree.Find("SomeValidID");
BananaTree savedBananaTree = BananaTree.Find("SomeValidID");
【问题讨论】:
-
要么使
Find()成为泛型方法,而返回类型是通用参数,要么在您的子类中隐藏Find()以在那里实现强制转换。 -
对于泛型方法,我是否必须从调用类传递类型?或者它会根据哪个子类调用它来推断它?我不允许在子类中隐藏 find()。
-
请看我的回答
标签: c# inheritance subclass superclass