是否可能有一个构造函数将值赋给整个实例
本文关键字:实例 有一个 构造函数 是否 | 更新日期: 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);