在开始之前,我想说明我意识到这不是实现此目的的理想方式。但是,调用类不能根据赋值规则进行更改。我试图理解并找到解决这个问题的办法,但我没有运气。C#如何超类返回3种可能的类型,而不需要从调用类中投射
下面有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()成为一个泛型方法,而返回类型是gerneric参数,要么在你的子类中隐藏Find()来在那里实现一个转换。 – ViRuSTriNiTy
对于泛型方法,我是否必须从调用类中传递类型?或者它会根据哪个子类调用它来推断它? 我不允许在子类中隐藏find()。 –
请看看我的回答 – ViRuSTriNiTy