2

我真正想要实现的目标:为object.

由于 C# 中没有全局别名,我想通过提供另一个myclass所有对象都可以隐式转换的类来解决这个问题,例如:

myclass foo () { return new object(); } // should be ok
myclass bar () { return "bla"; } // should be ok

如何?

(转换运算符:

    public static implicit operator myclass(object o)
    {
        return new given();
    }

只输出编译器错误 cs0553)

4

1 回答 1

2

好吧,你不能那样做。从 C# 4 规范的第 10.10.3 节:

仅当满足以下所有条件时,才允许类或结构声明从源类型S到目标类型的转换:T

  • ...
  • 排除用户定义的转换,不存在 from StoT或 from Tto的转换S

在你的情况下这不是真的,因此是错误的。

您还没有说为什么要这样做(您提到“没有全局别名”,但不清楚您要实现的目标),但是您不能这样做。您可以创建构造函数或静态方法来创建类的实例,但不能使用运算符来实现。

于 2013-07-03T22:44:53.833 回答