在.Net中覆盖/处理我自己的类型转换

时间:2011-04-20 14:29:57

标签: c# .net vb.net types

  

可能重复:
  Is there a way to define an implicit conversion operator in VB.NET?

我不记得曾见过或听到有人这样做过;但现在我处在这样一种情况,我认为为我的班级定义我自己的自定义'类型转换'会非常有用。

作为一个例子 - 假设我有自己的类'AwesomeDataManager'。它不从DataTable继承,但它以与DataTable类似的方式保存数据。我可以说'myDataTable = CType(MyAwesomeDataManager,DataTable)'并让它在我的类中执行一些代码来返回一个填充的DataTable。

当然,我可以做类似'MyAwesomeDataManager.GetDataTable'的事情,但为了与现有的代码库集成,我想避免它。

2 个答案:

答案 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#中有两个关键字有助于进行类型转换:implicitexplicit

在这种情况下,您需要implicit代码才能让人眼前一亮。但要小心,因为当人们意识到你在做什么时,它会引起混乱。我倾向于不通过快速阅读代码来发现隐式转换的使用(显式很难错过,因为它们需要强制转换)。