有可能有一个构造函数作为一个整体为实例赋值吗?

时间:2011-11-25 08:53:19

标签: c#

如果我有这样的课程:

class myClass
{
    string foo;
    string bar;

    public myClass(string foo, string bar)
    {
        //does some stuff here
        (myClass)deserializer.Deserialize(reader); //assign the return value to the instance
    }

}

可以实现这一目标:

public myClass(string foo, string bar)
    {
        //does some stuff here
        myClass tempobject = (myClass)deserializer.Deserialize(reader); //this method has a return value of type myClass
        this.foo = tempObject.foo;
        this.bar = tempObject.bar;
    }

SomeMethod返回myClass类型的值。我可以将此返回值分配给调用构造函数的myClass实例吗?

4 个答案:

答案 0 :(得分:3)

不,这是不可能的。

你可以做的是使SomeMethod静态,构造函数是私有的。这称为Factory Pattern,因为您有一个用于创建类实例的方法。工厂模式通常用于在运行时创建各种不同具体类的实例。


当你更新你的问题以说该方法不在你的类中时,我认为最好的选择是在你的类中创建一个方法来获取该类的另一个实例,然后在该方法中,复制所有财产。你可以在构造函数中调用它。

答案 1 :(得分:2)

否 - 构造函数不会将实例返回到您已创建的类中,因为在调用构造函数之前必须实例化 对象。构造函数只是对刚刚创建的类进行初始化工作。

相反,你必须使用"工厂"模式,像这样:

public class SomeClass {
    public static SomeClass CreateNew(string foo, string bar) {
        if (SOME_CONDITION) {
            // use our SomeMethod
            return SomeMethod(foo,bar);
        } else {
            // otherwise use the normal constructor
            return new SomeClass(x,y);
        }
    }
}

// ... elsewhere...

    SomeClass foo = Someclass.CreateNew("x","y");

答案 2 :(得分:0)

class myClass
{
    string foo;
    string bar;

    public myClass(string foo, string bar)
    {
        //does some stuff here
        mYclass result = SomeMethod(foo,bar); //this method has a return value of type myClass
        this.foo = result.foo;
        this.bar = result.bar;
    }
}

答案 3 :(得分:0)

您可以编写一个静态方法,允许您从阅读器中创建一个对象,如下所示:

class myClass  
{      
    public string foo { get; set; }
    public string bar { get; set; }        


    public myClass()      
    {          
        //does some stuff here     
    }

    public static myClass FromReader(Reader reader)
    {
        return (myClass)deserializer.Deserialize(reader); 
    }
}

并在您的代码中使用它:

myClass newMyClass = myClass.FromReader(reader);