大家好我需要一些帮助。我完全不知道如何使用继承来做这件事。
目的是更改衬衫对象的父类(服装)继承的“名称”属性的值。
通过调用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;
}
}
答案 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";
}
}