【问题标题】:Override/Handle My Own Type Conversions In .Net [duplicate]在.Net中覆盖/处理我自己的类型转换[重复]
【发布时间】:2011-08-09 13:48:09
【问题描述】:

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

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

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

当然,我可以执行“MyAwesomeDataManager.GetDataTable”之类的操作,但为了与现有代码库集成,我想避免它。

【问题讨论】:

  • Doh - 是的,我相信这是重复的。对不起!

标签: c# .net vb.net types


【解决方案1】:

您可以使用隐式或显式转换,如下所示:(请注意,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;
    }
}

【讨论】:

    【解决方案2】:

    C# 中有两个关键字有助于类型转换:implicitexplicit

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

    【讨论】:

      猜你喜欢
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      相关资源
      最近更新 更多