覆盖初始化类
本文关键字:初始化 覆盖 | 更新日期: 2023-09-27 18:11:56
当我创建一个类时,我希望能够覆盖初始化类。但这似乎不起作用。甚至尝试使用: base()
也无济于事。
public class Class1{
public string Str1;
public string Str2;
public Class1(){ Str1 = "Hello"; }
public Class1(string s) : base() <-------- Doesn't work
{
Str2 = "Goodbye";
}
}
基本上,我想调用new Class1("test");
,它应该用Hello
填充Str1
,用test
填充Str2
,而不必将第一个初始化项重写为第二个初始化项。
可以做些什么来实现这一点?
我可以将初始化方法分离成它自己的方法,并分别调用它们,但这似乎太冗余了…没有直接的方法吗?
Replace
public Class1(string s) : base()
public Class1(string s) : this()
调用同一类的无参数构造函数。this()
= Class1()
下面是一个带有继承的" base()
-case"的例子
public class Class1
{
public string Str1;
public Class1() { Str1 = "Hello"; }
public Class1(string s) { Str1 = s; }
}
public class Class2 : Class1
{
public string Str2;
public Class2() { Str2 = "World"; }
public Class2(string s) : base(s) // calls Class1(string s)
{
Str2 = s;
}
}
用法:
Class2 c1 = new Class2("test"); // test test
Class2 c2 = new Class2(); //Hello World
不使用'base':
public Class1(string s) : base()
{...}
用"这":
public Class1(string s) : this()
{...}
或者,如果您的意图是始终为'Str1'分配一个静态值,那么通过直接将值分配给属性来节省调用第一个构造函数的麻烦:
public string Str1 = "Hello";
base
将在您有基类时使用。this
在同一个类中使用。
既然你在同一个类中调用构造函数,你应该使用this
而不是base
;
用一些例子补充上面的内容:
假设我们有一个基类,那么你可以像下面这样使用base
关键字。注意:首先调用基类构造函数,然后调用子类构造函数
public class MainClass
{
public string Str1;
public MainClass(string s)
{
Str1 = s;
}
}
public class Class1 : MainClass
{
public string Str2;
public Class1(string s) : base("Hello")
{
Str2 = "Goodbye";
}
}
调用:var myClass = new Class1("GoodBye");
在相同的class
:
public class Class1
{
public string Str1;
public string Str2;
public Class1(string s)
{
Str2 = "Goodbye";
Str1 = "Hello";
}
}
或调用default constructor
:
public class Class1
{
public string Str1;
public string Str2;
public Class1()
{
Str1 = "Hello";
}
public Class1(string s): this()
{
Str2 = "Goodbye";
}
}
注意: default constructor
将在这里首先被调用
调用var class1 = new Class1("GoodBye");
另一种方法是使用
Auto-Implemented
属性,在前面提到的代码中,property
被赋予一个默认值:
public class Class1
{
public string Str1 { get; set; } = "Hello";
public string Str2 { get; set; }
public Class1(string s)
{
Str2 = "Goodbye";
}
}