【发布时间】:2020-01-23 18:40:41
【问题描述】:
我是 C# 泛型概念的新手,我想使用泛型概念返回接口实现类。下面是我目前没有泛型实现的示例:
1)返回接口的工厂类,该类有两个接受不同数据模型的重载方法:
public class Factory
{
public ICommon Init(DBInfoData dbInfoData)
{
return new ClassA(dbInfoData);
}
public ICommon Init(WebInfoData webInfoData)
{
return new ClassB(webInfoData);
}
}
2) 接口和接口实现两个类如下:
//=== Common Interface
public interface ICommon
{
void MethodA();
void MethodB();
}
//=== Internal access only ClassA
internal class ClassA : ICommon
{
private DBInfoData _DBInfoData = null;
public ClassA(DBInfoData dbInfoData)
{
_DBInfoData = dbInfoData;
}
public void MethodA()
{
throw new NotImplementedException();
}
public void MethodB()
{
throw new NotImplementedException();
}
}
//=== Internal access only ClassB
internal class ClassB : ICommon
{
private WebInfoData _WebInfoData = null;
public ClassB(WebInfoData webInfoData)
{
_WebInfoData = webInfoData;
}
public void MethodA()
{
throw new NotImplementedException();
}
public void MethodB()
{
throw new NotImplementedException();
}
}
3) 数据模型类如下:
//=== Database Information
public class DBInfoData
{
public string Server { get; set; }
public string Database { get; set; }
}
//=== Web Server Information
public class WebInfoData
{
public string URL { get; set; }
public int Port { get; set; }
}
现在我想实现 C# 的通用功能,在工厂类中我不想声明两个重载方法。使用单一方法,我可以根据数据模型传递返回 ClassA 或 ClassB。
【问题讨论】:
-
您现在是如何调用
Factory方法的?您只有两个数据模型,还是更多? -
“我不想声明两个重载方法”。这是为什么?您向我们展示的代码干净且易于理解。在这种情况下,我看不出使用泛型有什么好处。您是否在
Factory中遗漏了您想要删除的重复代码的某些部分? -
第二个@GeorgPatscheider 的评论。除非有你没有分享的东西,否则泛型在这里没有任何收获。坚持重载。
-
@GeorgPatscheider:据说想要实现通用概念,这将减少重载方法,并且通过单一方法可以绑定适当的类。我在工厂代码中没有遗漏任何部分。我喜欢基于数据模型绑定类,所以我正在研究如何在其中实现通用概念。