我正在寻找一种方法来对待所有.Net数据类型一致,所以我可以创建下面的模式,其中任何类型实施IGetValue<out T>
将投掷到IGetValue<object>
。出于某种原因,如果T是struct
,它不起作用,我不明白为什么。有没有一种方法可以实现以下模式?我需要一个通用的类/接口任何.Net数据类型
public interface IGetValue<out T>
{
T Value
{
get;
}
}
public class GetValue<T> : IGetValue<T>
{
public GetValue(T value)
{
_value = value;
}
private T _value;
public T Value
{
get { return _value; }
}
}
class Program
{
static void Main(string[] args)
{
IGetValue<string> GetString = new GetValue<string>("Hello");
IGetValue<int> GetInt = new GetValue<int>(21);
//This works!!!
if (GetString is IGetValue<object>)
{
Console.WriteLine("GetValue<string> is an IGetValue<object>");
}
else
{
Console.WriteLine("GetValue<string> is not an IGetValue<object>");
}
//This doesn't work!!! Why????
if (GetInt is IGetValue<object>)
{
Console.WriteLine("GetValue<int> is an IGetValue<object>");
}
else
{
Console.WriteLine("GetValue<int> is not an IGetValue<object>");
}
Console.ReadKey();
}
}
编辑:
我意识到发生了什么,我想在这里完成,似乎含糊其辞,但是这是一个更大的设计,其解释是太冗长的一部分。我需要的是让我的所有IGetValue<T>
与一个名为“Value”的属性共享一个通用类型或接口,并返回一个object
。为什么是冗长的部分。
对象的价值是非常基本的概念。你想在这里完成什么? – 2011-04-16 10:41:48