【发布时间】:2016-05-23 20:40:03
【问题描述】:
我有多个类,例如:
public class Base { }
public class Base1: Base { public static List<Base1> LoadFromXml(string path) }
public class Base2: Base { public static List<Base2> LoadFromXml(string path) }
那我想要一个这样的方法:
public List<T> PrepareBase<T>() where T: Base { return T.Load("C:\test.xml"); }
这样我就不必为每种类型都创建一个方法。 但我不知道如何完成这个或类似的事情。
问题是我不能让基类知道 LoadFromXml 方法,因为静态继承不是一回事。也不是使用静态方法创建单独的接口。
有没有办法做到这一点,还是我期望过高?
编辑: LoadFromXml 方法的一个例子:
public class Base1
{
public int ID { get; set; }
public string PropertyOnlyInBase1 { get; set; }
public static List<Base1> LoadFromXml(string path)
{
List<Base1> baseList = new List<Base1>();
XDocument doc = XDocument.Load(path);
foreach(var node in doc.Descendants("Base1"))
{
Base 1 base = new Base1() { ID = node.Attributes["id"] };
base.PropertyOnlyInBase1 = node.Element("PropertyOnlyInBase1");
baseList.Add(base);
}
return baseList;
}
}
所以基类也有一些独特的属性。这就是为什么我首先需要继承的东西。
【问题讨论】:
-
不可能。静态方法绑定到它们的定义类。
-
如果你想要多态,为什么不把它做成一个实例方法呢?还是一个可以返回不同类型列表的通用静态方法?
-
你打算怎么给
PrepareBase打电话?你想用它的输出做什么? (换句话说......假设你可以这样做 - 就像你写的那样。使用它的语句是什么样的?) -
@Amit:在我的 MainForm.cs 加载方法中:
this.base1List = PrepareBase<Base1>();并将该列表用作 ComboBox 的数据源。 | @DStanley 在我看来,与实例没有任何联系的方法应该是实例方法,这似乎不合逻辑。 -
@ManuelHoffmann 我同意,但如果你想要多态性,它可能是必要的。
标签: c# inheritance static-methods