我有一个简单的类,它包括一个字符串值( s )和一个写入该值的初始化函数。 s 设置为默认值。
class ExampleClass
{
public string s = "default";
public ExampleClass()
{
Console.Write(s);
}
static void Main(string[] args)
{
ExampleClass MyClass = new ExampleClass{ s = "MyString" };
}
}
运行时,使用自定义字符串(“ MyString”)构成该类的实例。当创建这个新实例时,初始化函数将被调用并运行。问题是,初始化函数在设置值 s 之前运行,因此该函数使用s的默认函数(“ default”)运行。
是否存在一种优雅的方法来运行初始化函数,该初始化函数具有从类的新实例中设置的值?
答案 0 :(得分:1)
您正在内部构造函数-ExampleClass中进行Console.Write。初始化类ExampleClass的第二个调用构造函数。所以是的,它将始终写入“默认”而不是“ MyString”
您需要具有另一个执行Console.Write的功能。像这样
public void PrintString(){ Console.Write(s); }
然后在您的主要功能中执行以下操作:
MyClass.PrintString();
一个建议的更改-不确定这是否优雅,但可以认为是一种很好的做法是在类中没有公共参数。也许这-
class ExampleClass
{
public ExampleClass(string s = "default")
{
Console.Write(s);
}
static void Main(string[] args)
{
ExampleClass MyClass = new ExampleClass("MyString");
}
}
答案 1 :(得分:-1)
您可以像这样简单地调用构造函数。
ExampleClass MyClass = new ExampleClass{ s = "MyString" };
...
ExampleClass MyClass = new ExampleClass(); //so here the valus of s is default
MyClass.s = "MyString";
上面的代码行等同于下面的代码。
{{1}}