Overwride Initialize Class?

时间:2016-10-06 13:16:50

标签: c# asp.net

当我创建一个类时,我希望能够覆盖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");,它应该Str1HelloStr2填充test,而不必重写代码第一个初始化程序到第二个。

可以做些什么来实现这个目标?

我可以将初始化方法分离为自己的方法并单独调用它们,但它看起来似乎太多了......是不是有直接的方法来做到这一点?

3 个答案:

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

当你有一个基类时,将使用

basethis要在同一个班级中使用。

由于您在同一个类中调用构造函数,因此您应该使用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";