如果没有 T 的对象,我如何检查/评估 T 的确切类型。我知道我的问题可能令人困惑,但考虑一下......
public abstract class Business
{
public abstract string GetBusinessName();
}
public class Casino : Business
{
public override string GetBusinessName()
{
return "Casino Corp";
}
}
public class DrugStore : Business
{
public override string GetBusinessName()
{
return "DrugStore business";
}
}
public class BusinessManager<T> where T : Business
{
private Casino _casino;
private DrugStore _drugStore;
public string ShowBusinessName()
{
string businessName;
if (T == Casino) // Error: How can I check the type?
{
_casino = new Casino();
businessName = _casino.GetBusinessName();
}
else if (T == DrugStore) // Error: How can I check the type?
{
_drugStore = new DrugStore();
businessName = _drugStore.GetBusinessName();
}
return businessName;
}
}
我只想在客户端有这样的东西。
protected void Page_Load(object sender, EventArgs e)
{
var businessManager = new BusinessManager<Casino>();
Response.Write(businessManager.ShowBusinessName());
businessManager = new BusinessManager<DrugStore>();
Response.Write(businessManager.ShowBusinessName());
}
请注意,当我调用 BusinessManager 时,我实际上并没有为 Casino 和 Drugstore 创建实际对象,我只是将它作为类的通用类型约束传递。我只需要确切地知道我传递给 BusinessManager 的是什么类型,就可以知道要实例化的确切类型是什么。谢谢...
PS:我不想为赌场和药店创建单独的特定 BusinessManager..
您也可以对设计发表评论..谢谢..
附加:如果类 Casino 和 DrugStore 是一个抽象类 =)
最佳答案
你可以写
if(typeof(T) == typeof(Casino))
但实际上这种逻辑是一种代码味道。
这是解决这个问题的一种方法:
public class BusinessManager<T> where T : Business, new() {
private readonly T business;
public BusinessManager() {
business = new T();
}
}
但我个人更喜欢
public class BusinessManager<T> where T : Business {
private readonly T business;
public BusinessManager(T business) {
this.business = business;
}
public string GetBusinessName() {
return this.business.GetBusinessName();
}
}
关于c# - 泛型:如何检查 T 的确切类型,没有 T 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4064322/