从方法返回到子类的Cast对象

wpe*_*rse 5 c# methods subclass return-value

我有一个返回类型对象的方法Bucket:

Bucket Dispense(string typeName);
Run Code Online (Sandbox Code Playgroud)

我有一个名为Widget子类的类Bucket:

public class Widget : Bucket {  }
Run Code Online (Sandbox Code Playgroud)

我想做这个:

Widget w = Controller.Dispense('widget');
Run Code Online (Sandbox Code Playgroud)

鉴于a Widget是a ,我认为应该是可能的Bucket.我可以将返回类型强制转换Dispense(string)为类型Widget,但我更倾向于在没有强制转换的情况下执行此操作.有没有一种别名BucketWidget类型的方法?

McG*_*gle 1

您可以使用隐式转换运算符。这在Bucket类中定义如下:

public static implicit operator Widget(Bucket bucket)
{
    // return the typecast Widget (can also perform any conversion logic here if necessary)
    return (Widget)bucket;
}
Run Code Online (Sandbox Code Playgroud)

现在您可以“隐式”执行转换:

Bucket b = new Bucket();
Widget w = b;
Run Code Online (Sandbox Code Playgroud)

请注意根据 pst 的评论以及 MSDN 链接谨慎使用:

转换运算符可以是显式的或隐式的。隐式转换运算符更易于使用,但当您希望运算符的用户知道正在发生转换时,显式运算符非常有用。