使用一个参数创建子类以更改父类的值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";
}
}
大家好,我需要一些帮助。我完全不了解如何使用继承来做到这一点。
目的是改变'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";
}
}