Generic Wrapper类的隐式C#转换

时间:2014-01-29 18:37:49

标签: c# generics casting implicit-conversion

我正在编写一个通用包装类来为我的另一个类中的一堆属性实现INotifyPropertyChanged。我一直在研究implicit转换运算符,但我对如何在泛型类中使用它感到困惑。基本上我想获得内部包装的值,而不需要显式调用内部属性。我正在寻找的行为本质上是Nullable<T>类/结构如何工作,如果内部值不是null,那么它将直接返回内部包装的值。示例如下:

//current behavior
MyWrapperClass<int> wrapped = new MyWrapperClass();
int startCount = wrapped.Data;

//behavior I am looking to implement
int startCount = wrapped

在上面的第二个示例中,wrap将返回内部包装的值而不是类型T,而不必调用内部属性。这就是Nullable<T>的行为方式。

在查看隐式转换时,似乎我需要在此MSDN文章之前知道该类型:Using Conversion Operators

我是否需要转换为dynamic类型,因为该类型未知?例如:

public static implicit operator dynamic(MyWrapperClass w)

或者我可以对类型T执行隐式转换,如下所示?这会阻止我将方法设置为静态,我注意到在我看到的涉及隐式和显式转换运算符的所有示例代码中都使用了该方法。这个选项对我来说似乎“错误”,但我在这里找不到关于这个主题的更多信息。

public implicit operator T(MyWrapperClass w)

编辑:这SO Question可能会导致这被标记为欺骗,但接受的答案不是我要求的,因为他们说要使用我已经在做的属性。

1 个答案:

答案 0 :(得分:1)

经过一些测试后,第二个选项似乎没有问题,但仍然允许自己是静态的。我使用@ AndersForsgren对this question(未接受的答案)的回答来解决这个问题。显然我误解了隐式运算符重载是如何工作的。更正此问题的代码段如下:

public static implicit operator T(WrapperClass<T> input)
{
     return input.Data;
}