可能重复:
Is there a way to define an implicit conversion operator in VB.NET?
我不记得曾见过或听到有人这样做过;但现在我处在这样一种情况,我认为为我的班级定义我自己的自定义'类型转换'会非常有用。
作为一个例子 - 假设我有自己的类'AwesomeDataManager'。它不从DataTable继承,但它以与DataTable类似的方式保存数据。我可以说'myDataTable = CType(MyAwesomeDataManager,DataTable)'并让它在我的类中执行一些代码来返回一个填充的DataTable。
当然,我可以做类似'MyAwesomeDataManager.GetDataTable'的事情,但为了与现有的代码库集成,我想避免它。
答案 0 :(得分:3)
您可以使用隐式或显式转换,如下所示:(注意LetMeChange隐式转换为SomethingMoreComfortable)
class Program
{
static void Main(string[] args)
{
LetMeChange original = new LetMeChange { Name = "Bob" };
SomethingMoreComfortable casted = original;
Console.WriteLine(casted.Name);
}
}
public class LetMeChange
{
public static implicit operator SomethingMoreComfortable(LetMeChange original)
{
return new SomethingMoreComfortable() { Name = original.Name };
}
public string Name
{
get;
set;
}
}
public class SomethingMoreComfortable
{
public string Name
{
get;
set;
}
}
答案 1 :(得分:2)
C#中有两个关键字有助于进行类型转换:implicit
和explicit
。
在这种情况下,您需要implicit
代码才能让人眼前一亮。但要小心,因为当人们意识到你在做什么时,它会引起混乱。我倾向于不通过快速阅读代码来发现隐式转换的使用(显式很难错过,因为它们需要强制转换)。