设置类实例中的变量后运行类初始化函数的优雅解决方案

时间:2020-06-29 01:50:39

标签: c# function class initialization

我有一个简单的类,它包括一个字符串值( 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”)运行。

是否存在一种优雅的方法来运行初始化函数,该初始化函数具有从类的新实例中设置的值?

2 个答案:

答案 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}}