举例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";
}
...
}
{
public void SetData<T>(object obj)
{
//传入的obj类型由T来定
//若obj类型是B
//求如何调用obj的GetData()方法?
//强转,as 都不行,难道在B中还要自己实现一个object 到B的转换方法?
}
}public Class B
{
public string GetData()
{
return "123";
}
...
}
public Class A
{
public void SetData<T>(object obj)
{
//传入的obj类型由T来定
//若obj类型是B
//求如何调用obj的GetData()方法?
//强转,as 都不行,难道在B中还要自己实现一个object 到B的转换方法?
if(typeof(T) == typeof(B))
{
string data = ((B)obj).GetData();//目的是这样的,我想拿到这样的数据
}
}
}
public Class B
{
public string GetData()
{
return "123";
}
...
}
{
public void SetData<T>(object obj)
{
//传入的obj类型由T来定
//若obj类型是B
//求如何调用obj的GetData()方法?
//强转,as 都不行,难道在B中还要自己实现一个object 到B的转换方法?
if(typeof(T) == typeof(B))
{
string data = ((B)obj).GetData();//目的是这样的,我想拿到这样的数据
}
}
}
public Class B
{
public string GetData()
{
return "123";
}
...
}
虽然我可能会这样写:
public void SetData<T>(T obj)
{
var b = obj as B;
if (b != null)
{
var data = b.GetData();
}
}
真对? 我用的时候咋不行呢? 提示我object无法隐式转换为B啊.
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了,全部强类型到底,不用接口限制就没意义了。
public Class A
{
public void SetData<T>(object obj)
{
//传入的obj类型由T来定
//若obj类型是B
//求如何调用obj的GetData()方法?
//强转,as 都不行,难道在B中还要自己实现一个object 到B的转换方法?
if(typeof(T) == typeof(B))
{
string data = ((B)obj).GetData();//目的是这样的,我想拿到这样的数据
}
else if(typeof(T) == typeof(string))
{
string data = (string)obj;
}
}
}
public Class B
{
public string GetData()
{
return "123";
}
...
}public Class C
{
public C()
{
A mData = new A(); //那也就是说这样用时行不通的了?
A.SetData<B>(new B);
A.SetData<string>("name");
}
}
哦 看来如果没有同样的接口,用泛型没什么意义了.只能这样用了吧?:
if(obj.GetType() == typeof(B))
{
string data = ((B)obj).GetData();//目的是这样的,我想拿到这样的数据
}
else if(obj.GetType() == typeof(string))
{
string data = (string)obj;
}