使用一个参数创建子类以更改父类的值Class

Making a Subclass with one parameter to change a value of Parent Class

大家好,我需要一些帮助。我完全不了解如何使用继承来做到这一点。

目的是改变'Name' 属性 的值,该值由衬衫对象的Parent Class (Clothing) 继承。

当使用我的 C# Web 窗体单击按钮时,调用 "ReNameShirt()" 的 Shirt 方法更改名称,然后显示新的 'name'。

我的老师暗示我要使用子程序。还是输了。

你能帮帮我吗?非常感激。

服装Class

using System;
                                 //THE PARENT CLASS 'Clothing'
public class Clothing
{
    public string _name;
    public string _size;

    public string name {get; set;}

    public string size {get; set;}

}
                                //SUBCLASS OF 'Trousers'
public class Trousers : Clothing
{
    public string LegLength { get; set; }
    public Trousers()
    {
        LegLength = "91";
    }

}

public class Shirt : Clothing
{
    public string ReNameShirt()
    {
        Shirt Po = new Shirt();
        Po.name = "blue shirt";
        return ReNameShirt();
    }

在 Inheritance.aspx.cs 文件中:

    protected void Button2_Click(object sender, System.EventArgs e)
    {
        Shirt myShirt = new Shirt();
        myShirt.name = "red polo";
        myShirt.size = "85";
        Label2.Text = "<b>Name:</b> " + myShirt.name + " <b>Size</b> " + myShirt.size;

        myShirt.ReNameShirt();
        Label3.Text = myShirt.size;
    }
}

您的 ReNameShirt 方法没有按照您的意愿行事。它正在实例化一件新衬衫,并会导致递归而不是更改衬衫的名称。将其更改为:

public void ReNameShirt()
{
   this.name = "blue shirt";
}

您的衬衫已经存在,因此您无需创建它的实例。这样做并没有修改 "this shirt." 这就像你告诉我 "dye this shirt blue" 而我说 "here is another blue shirt" 但后来把它扔掉了(因为变量超出了范围)。您的下一个问题是您正在进行递归。由于听起来您是编程新手,所以让我解释一下。递归是当一个方法(你的教授称之为子程序,它的另一个术语)调用自身时。没关系,但你需要它在某个时候结束。在您的情况下,您的方法将调用自身,直到您溢出堆栈(了解它...... Whosebug?)并且程序无法再进行任何调用,因此它会崩溃。无论何时进行递归,都需要确保有一种方法可以结束它。经典的递归问题就像阶乘,它被定义为 n*(n-1) 阶乘,但它结束的方式是 1!只是定义为1,所以一旦n-1 = 1,我就不再阶乘了,我只是return 1.

public class Shirt : Clothing
{
    public void ReNameShirt()
    {
//        Shirt Po = new Shirt(); You are a shirt, there is no need to create one.
        name = "blue shirt";
//        return ReNameShirt(); This will cause infinite recursion and crash.
    }

您的问题是您正在方法中创建一个新实例并更新该实例的值。 你的功能应该是这样的:

public class Shirt : Clothing
{
    public void ReNameShirt()
    {
        name = "blue shirt"; 
    }
}