Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
泛型包装器类的隐式C#转换_C#_Generics_Casting_Implicit Conversion - Fatal编程技术网

泛型包装器类的隐式C#转换

泛型包装器类的隐式C#转换,c#,generics,casting,implicit-conversion,C#,Generics,Casting,Implicit Conversion,我正在编写一个通用包装器类来实现另一个类中的一组属性的INotifyPropertyChanged。我一直在研究转换运算符,但对于如何在泛型类中使用它,我有点困惑。本质上,我希望获得内部包装的值,而不需要显式调用内部属性。我寻找的行为本质上是类/结构的工作方式,如果内部值不是null,那么它将直接返回内部包装的值。示例如下: //current behavior MyWrapperClass<int> wrapped = new MyWrapperClass(); int start

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

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

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

public implicit operator T(MyWrapperClass w)

编辑:这可能会导致将其标记为重复,但接受的答案不是我想要的,因为他们说要使用我已经在做的属性。

经过一些测试后,第二个选项似乎可以正常工作,并且仍然允许其本身是静态的。我用@Andersforgren的答案(不被接受的答案)来解决这个问题。显然,我误解了隐式操作符重载的工作原理。更正此问题的代码段如下所示:

public static implicit operator T(WrapperClass<T> input)
{
     return input.Data;
}
公共静态隐式运算符T(包装器类输入)
{
返回输入数据;
}

这不是你问题的答案,只是一个观察。。。可以使用AOP使类实现INotifyPropertyChanged吗?像Fody或Postsharp之类的东西?谢谢你的建议!我以前从未使用过Fody或PostSharp,但我一定会研究它。基本上,如果修改了属性,则会设置一个标志将其保存回最初生成它们的配置文件。你能举一个例子说明如何使用这两种解决方案中的任何一种来实现这一点吗?Fody很容易使用NuGet将Fody(PropertyChanged.Fody会做的)安装到你的项目中,然后用[ImplementPropertyChanged]装饰你的类。。。就是这样-您的属性现在在构建时实现INotifyPropertyChanged!我知道PostSharp可以做到这一点(google LocationInterceptionSpect,感谢你自己做),但我有免费许可证,这是一个“付费”功能,所以我从来没有使用过magic属性。这两种方法都将inotifypropertyChge的实现在MSBuild编译后编织到输出代码中(我认为-这有点像魔术!)祝你好运!
public static implicit operator T(WrapperClass<T> input)
{
     return input.Data;
}