当我创建一个类时,我希望能够覆盖initialize类。但它似乎没有用。即使尝试使用: 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");
,它应该Str1
与Hello
和Str2
填充test
,而不必重写代码第一个初始化程序到第二个。
可以做些什么来实现这个目标?
我可以将初始化方法分离为自己的方法并单独调用它们,但它看起来似乎太多了......是不是有直接的方法来做到这一点?
答案 0 :(得分:5)
替换
public Class1(string s) : base()
带
public Class1(string s) : this()
调用同一个类的无参数构造函数。 this()
= Class1()
以下是带有继承的“base()
- 案例”的示例
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
答案 1 :(得分:1)
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";
}
}
答案 2 :(得分:1)
而不是使用'base':
public Class1(string s) : base()
{...}
使用'this':
public Class1(string s) : this()
{...}
或者,如果您的目的是始终为“Str1”分配静态值,那么只需将值直接分配给属性,就可以省去调用第一个构造函数的麻烦:
public string Str1 = "Hello";