我有两个相同的类,但是在不同的命名空间中,是否可以使用通用方法来实例化和填充一个或另一个对象?
namespace ns1{
//.....
public class class1{
private string name;
public string name{
set{this.name=value;
}
}
}
namespace ns2{
//....
public class class2{
private string name;
public string name{
set{this.name=value;
}
}
}
我已经尝试过类似的方法,但是由于T是对象,因此无法像字段“名称”那样识别T的类型:
class1 cl1 = getMyclass<Class1>("Daniel");
class2 cl2 = getMyclass<Class2>("Daniel");
private T getMyClass<T>(string name) where T : new()
{
T tclass = new T();
tclass.name = name; // ***THIS IS NOT POSSIBLE***
return tclass;
}
答案 0 :(得分:3)
您可以介绍和介面
public interface INamed
{
string Name { get; set; }
}
您的类应实现此接口
public class1: INamed { ...
public class2: INamed { ...
您的方法应该具有接口的通用约束
private T getMyClass<T>(string name) where T : INamed, new() { ...
答案 1 :(得分:1)
您可以定义一个接口或基类,在您的类中实现它,并使用该接口/基类来约束泛型。
interface IHaveName
{
string Name { get; set;}
}
class Class1 : IHaveName
{
...
}
private T getMyClass<T>(string name) where T : new(), IHaveName
答案 2 :(得分:-1)
使用接口的解决方案可能是您最好的选择,但是可以在不引入接口的情况下做到这一点(在您的情况下可能不可行),即使用dynamic
:
private T GetMyClass<T>(string name) where T : new()
{
dynamic tclass = new T();
tclass.name = name;
return tclass;
}