在.Net中覆盖/处理我自己的类型转换
本文关键字:我自己 自己的 类型转换 处理 Net 覆盖 | 更新日期: 2023-09-27 17:52:34
可能重复:
有没有一种方法可以在VB.NET中定义隐式转换运算符?
我不记得见过或听说过有人这样做;但现在我认为为我的类定义自己的自定义"类型转换"会非常有用。
举个例子,假设我有自己的类"AwesomeDataManager"。它不是从DataTable继承的,但它以与DataTable类似的方式保存数据。我希望能够说,"myDataTable=CType(MyAwesomeDataManager,DataTable(",并让它在我的类中执行一些代码,返回一个填充的DataTable。
当然,我可以做一些类似"MyAwesomeDataManager.GetDataTable"的事情,但为了与现有的代码库集成,我想避免它。
您可以使用隐式或显式强制转换,如下所示:(请注意,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;
}
}
C#中有两个关键字有助于类型转换:implicit
和explicit
。
在这种情况下,您可能需要implicit
作为代码养眼剂。然而,要小心,因为当人们意识到你在做什么时,这可能会引起混乱。我倾向于不通过快速阅读代码来发现隐式转换的使用(显式转换很难错过,因为它们需要强制转换(。