是否有可能重载I don';类的隐式或显式强制转换运算符;t拥有
本文关键字:转换 拥有 运算符 重载 有可能 don 是否 | 更新日期: 2023-09-27 18:28:22
几乎都在标题中。是否可以在我不拥有的类上创建强制转换重载。例如,如果我要为NotifyIcon类(它是密封的)创建一个包装器,我实际上不能将它与任何东西一起使用;我必须返回一个实例,这个实例有点扼杀了做装饰器的能力。有可能在某个地方创建一个强制转换重载,在那里我基本上可以返回NotifyIcon的私有实例吗?听起来不太稳定,但我认为它会达到我想要的。
通常,我会做一些类似的事情:
public static implicit operator MyClass(SomeOtherClass input)
{
// do things to come up with a MyClass
}
但只有当返回类型为MyClass时,这才有效。我想做一些简单的事情,比如:
public class MyPsuedoDecoratorClass
{
private NotifyIcon _icon;
public MyPsuedoDecoratorClass(NotifyIcon icon)
{
_icon = icon;
}
// some decorated methods
public static implicit operator NotifyIcon(MyPsuedoDecoratorClass input)
{
return _icon;
}
}
这样我就可以将它用作初始化包装器。
你基本上不能,但你可以使用NotifyIcon
的标签来存储它的人工派生对象,它仍然很优雅:
public static class NotifyIconExtesionMethods {
public static MyClass As<T>( this NotifyIcon notifyIcon ) {
return notifyIcon.Tag as T;
}
}
class MyClass {
private NotifyIcon notifyIcon;
public MyClass( ) {
notifyIcon = ...;
...
notifyIcon.Tag = this;
}
public T As<T>( ) {
return notifyIcon as T;
}
}
//In some method:
var notifyIcon = new MyClass( ).As<NotifyIcon>( );
...
var myClass = notifyIcon.As<MyClass>( );