我对 C# 还很陌生,希望在这里得到一些帮助。mypath在本例中,该变量是一个占位符。该类包含在using Programm.src;
这是我的代码,我想input_excel_path在mainWindow1对象中初始化变量。
编译器中的结果
错误 CS0747:无效的初始化程序成员声明符和编译器错误 CS0165:使用未分配的局部变量“名称”。
MainWindow mainWindow1 = new MainWindow()
{
mainWindow1.m_input_excel_path = mypath;
};
Run Code Online (Sandbox Code Playgroud)
这是我的课:
class MainWindow
{
public string m_input_excel_path = String.Empty;
public MainWindow(string input_excel_path )
{
m_input_excel_path = input_excel_path;
}
}
Run Code Online (Sandbox Code Playgroud)
对象初始值设定项语法直接指定属性,无需变量名称。您已经有了一个参数化构造函数,那么为什么不直接调用构造函数呢?
MainWindow mainWindow1 = new MainWindow(mypath);
Run Code Online (Sandbox Code Playgroud)
如果您想按照预期的方式使用初始化语法,则必须在类中实现无参数构造函数,然后在初始化时使用正确的语法:
class MainWindow
{
public string m_input_excel_path = String.Empty;
public MainWindow(string input_excel_path)
{
m_input_excel_path = input_excel_path;
}
public MainWindow() {
// empty ctor required for your initializer to work
}
}
// somewhere else:
MainWindow mainWindow1 = new MainWindow
{
m_input_excel_path = mypath
};
Run Code Online (Sandbox Code Playgroud)
初始化语法只是以下代码的语法糖:
MainWindow mainWindow1 = new MainWindow();
mainWindow1.m_input_excel_path = mypath;
Run Code Online (Sandbox Code Playgroud)
请参阅对象初始值设定项和构造函数之间有什么区别?更多细节。
并且没有什么可以阻止您混合构造函数调用和初始化语法。例如,如果您的班级中有另一个字段/属性:
class MainWindow
{
public string m_input_excel_path = String.Empty;
public int age;
public MainWindow(string input_excel_path)
{
m_input_excel_path = input_excel_path;
}
}
// somewhere else:
MainWindow mainWindow1 = new MainWindow(mypath)
{
age = 42
};
Run Code Online (Sandbox Code Playgroud)