如何在不创建新实例的情况下进行隐式转换?

时间:2013-12-29 14:02:05

标签: c# implicit-conversion implicit

我有一个看起来像这样的课程

class MyClass
{
    string myData;

    //.....
    //other fields

    public static implicit operator string(MyClass c)
    {
        return c.myData;
    }


}

现在,当我将类的值赋给字符串时,我得到myData的值。但是在microsoft的example中,为了从MyClassstring进行隐式对流,我必须在静态方法中创建MyClass的新实例。我不想这样做,而是想简单地将字符串的值赋给myData字段。

这可以用c#做,如果是,我该怎么做?

1 个答案:

答案 0 :(得分:3)

听起来没有直接的解决方案来满足您的需求。我建议尝试运算符重载,这将允许执行一些我认为你需要的东西,理解=(相等)不能重载可能你想尝试+ =你可以在这里找到更多的帮助:

http://msdn.microsoft.com/en-us/library/6fbs5e2h.aspx

这是一个示例版本:

namespace ConsoleApplication1
{
    public struct MyClass
    {
        public string MyData {get;set;}


        // Constructor. 
        public MyClass(string obj1):this()
        {
            this.MyData = obj1;
        }


        public static MyClass operator +(MyClass c1, string var3)
        {
            return new MyClass(var3);
        }

        public override string ToString()
        {
            return (System.String.Format("{0} ", this.MyData));
        }
    }

    [System.Runtime.InteropServices.GuidAttribute("D36900FE-8902-4ED8-B961-DE5B3F3273AC")]
    class Program
    {
        static void Main(string[] args)
        {
           MyClass obj1 = new MyClass();
            obj1 += "Hello";               
            Console.ReadKey();
        }
    }
}