是否可能有一个构造函数将值赋给整个实例

本文关键字:实例 有一个 构造函数 是否 | 更新日期: 2023-09-27 18:15:47

如果我有这样一个类:

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实例吗?

是否可能有一个构造函数将值赋给整个实例

不,那是不可能的。

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


当你更新了你的问题说方法不在你的类中,那么我认为最好的选择是在你的类中创建一个方法,该方法需要类的另一个实例,然后在该方法中复制所有属性。你可以在你的构造函数中调用它

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

相反,你必须使用"工厂"模式,像这样:
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");
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;
    }
}

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

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);