【问题标题】:overloading/implicit operator for 'as''as' 的重载/隐式运算符
【发布时间】:2011-06-01 15:57:41
【问题描述】:
class Person
{
   string Name;
   int Age;
}

我希望能够将字符串隐式转换为 Person,如下所示

var mrFoo = "Foo" as Person;

我知道我可以通过定义隐式转换来做到以下几点

Person mrFoo = "Foo";

但我专门使用“as”运算符

【问题讨论】:

  • 您可以定义显式转换运算符重载并使用显式转换 (Person) 而不是 as 运算符。

标签: c# operator-overloading


【解决方案1】:

不,你不能那样做。 "as" 运算符 从不 使用用户定义的转换 - 仅引用转换和拆箱转换。基本上,有问题的引用必须是正确的类型。

我个人强烈建议您在绝大多数情况下远离转换运算符(尤其是隐式运算符)。通常有一个转换方法会更清晰,例如Person.FromString(...).

【讨论】:

    【解决方案2】:

    您是否考虑过使用参数化构造函数?

    var mrFoo = new Person("Foo");

    【讨论】:

    • 这是最明智的做法。
    【解决方案3】:

    无需使用as 运算符,因为您可以使用implicit 运算符来做到这一点:http://msdn.microsoft.com/en-us/library/z5z9kes2(v=vs.71).aspx

    按照这些思路应该可以工作:

    public static implicit operator Person(string s)
    {
      Person p = new Person() {Name = s};
      return p;
    }
    

    现在你可以简单地做:

    Person p = "John Doe";
    

    【讨论】:

    • 那么,您究竟如何能够在密封系统类型中重载运算符?很确定你不能这样做。
    猜你喜欢
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 2011-05-13
    • 1970-01-01
    • 2014-08-18
    相关资源
    最近更新 更多