读书人

泛型参数变换为原型

发布时间: 2013-09-23 11:26:10 作者: rapoo

泛型参数转换为原型
举例


public Class A
{
public void SetData<T>(object obj)
{
//传入的obj类型由T来定
//若obj类型是B
//求如何调用obj的GetData()方法?
//强转,as 都不行,难道在B中还要自己实现一个object 到B的转换方法?


}
}

public Class B
{
public string GetData()
{
return "123";
}
...
}

[解决办法]
看不出你在什么时候转成B,写一个 GetData<T>方法转为需要的类型
[解决办法]
你这样写就对
虽然我可能会这样写:
public void SetData<T>(T obj)
{
var b = obj as B;
if (b != null)
{
var data = b.GetData();
}
}
[解决办法]
public void SetData<T>(T obj)
where T:IXXX 带有这方法的接口

这样做才有意义。否则没有任何意义。也就是反射, dynamic这种临时性的玩意
[解决办法]
只要如此即可:
public class A
{
public void SetData<T>(T obj) where T:IGetData
{
string data = obj.GetData();
}
}

public class B : IGetData
{
public string GetData()
{
return "123";


}
...
}

public interface IGetData
{
string GetData();
}


用了泛型就别再用弱类型object了,全部强类型到底,不用接口限制就没意义了。

读书人网 >C#

热点推荐