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

时间:2015-04-30 01:26:48

标签: c# inheritance subroutine

大家好我需要一些帮助。我完全不知道如何使用继承来做这件事。

目的是更改衬衫对象的父类(服装)继承的“名称”属性的值。

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

我的老师通过说使用子程序来暗示我。仍然输了。

你能救我吗?非常感激。

服装类

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;
    }
}

3 个答案:

答案 0 :(得分:1)

你的衬衫已经存在,所以你不需要创建它的实例。这样做并不能修改这件衬衫。&#34;如果你告诉我&#34;将这件衬衫染成蓝色&#34;而我说#34;这是另一件蓝色衬衫&#34;但随后扔掉了(因为变量超出了范围)。你的下一个问题是你在做递归。因为听起来你是编程的新手,让我解释一下。递归就是一个方法(你的教授正在调用一个子程序,另一个术语)调用自身。没关系,但你需要它在某个时候结束。在你的情况下,你的方法将调用自己,直到你溢出堆栈(得到它... stackoverflow?)并且程序不能再进行任何调用,因此它将崩溃。当你做递归时,你需要确保有办法结束它。经典递归问题就像是阶乘,它被定义为n *(n-1)阶乘,但它结束的方式是1!刚定义为1,所以一旦n-1 = 1,我就不再进行因子分析,我只返回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.
    }

答案 1 :(得分:0)

您的ReNameShirt方法并没有做您正在做的事情。它会实例化一件新衬衫,并会引起递归,而不是改变衬衫的名字。将其更改为:

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

答案 2 :(得分:0)

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

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