基本模型应该有属性,而不是字段。
public abstract class BaseModel {
public abstract string Name { get; }
public abstract string NamePlural { get; }
//....
}
必须重写抽象方法才能实现它们。
public class Production : BaseModel
{
public override string Name => "production";
// Same as: public override string Name { get { return "production"; } }
public override string NamePlural => "productions";
//....
}
将对象传递给
SomeMethod
以下内容:
public class Store {
public BaseModel SomeMethod<T>(T model)
where T : BaseModel
{
string name = model.Name;
string namePlural = model.NamePlural;
...
}
}
仅为了访问名称,不需要泛型类型参数,因为
Production
其他派生类继承这些名称。仍然可以将生产对象作为参数传递给方法:
public class Store {
public BaseModel SomeMethod(BaseModel model)
{
string name = model.Name;
string namePlural = model.NamePlural;
...
}
}
如果你想用
new
在泛型类型参数上,添加
新的
约束。这就迫使
T
要有默认构造函数,即没有参数的构造函数:
public BaseModel SomeMethod<T>()
where T : BaseModel, new
{
var model = new T();
string name = model.Name;
...
}
如果你想给
生产
一个静态行为,你可以把它变成一个单体。在类型名或泛型类型名上,只能访问静态成员。因为静态成员不能是抽象的,也不能被继承,所以如果您想要继承和静态行为,那么singleton模式是一种方法。
public class Production : BaseModel
{
public static readonly Production Instance = new Production();
private Production() // makes it non-instantiatable form outside.
{ }
...
}
你会用这个
store.SomeMethod(Production.Instance);