【问题标题】:Elegant solution to running a classes initialization function after the variables in an instance of the class have been set设置类实例中的变量后运行类初始化函数的优雅解决方案
【发布时间】:2020-10-19 03:25:54
【问题描述】:

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

有没有一种优雅的方式来运行初始化函数,其值是从类的新实例中设置的?

【问题讨论】:

    标签: c# function class initialization


    【解决方案1】:

    您正在构造函数中执行 Console.Write(s) - ExampleClass。在您初始化类 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");
       }
    }
    

    【讨论】:

      【解决方案2】:

      您可以像这样简单地调用构造函数。

      ExampleClass MyClass = new ExampleClass ("MyString" );
      

      ...

      ExampleClass MyClass = new ExampleClass{ s = "MyString" };
      

      上面一行相当于下面的代码。

      ExampleClass MyClass = new ExampleClass(); //so here the valus of s is default
      MyClass.s = "MyString";
      

      【讨论】:

      • 我已经更改了我的代码,一开始很混乱,所以有人否决了它,如果仍然有问题,请告诉我
      猜你喜欢
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      • 2023-03-08
      • 2017-10-23
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      相关资源
      最近更新 更多