C# 传递给方法的成员变量和参数之间的区别
C# difference between member variables and arguments passed to a method
我正在完成一项具有非常具体说明的作业,如果有任何兴趣,我将 post 在我创建的代码下方。但是,简而言之,我要创建一个 BasicShape
摘要 class,以及一个 Circle
和 Rectangle
subclasses。每个subclass都有计算形状面积的方法。该面积是使用成员变量计算的。但是,在我下面的代码中,这些成员变量从未被赋值。我对如何将它分配给它们感到困惑,因为 Circle
和 Rectangle
方法也需要将参数传递给它们。这些参数 x
、y
、r
for Circle
和 w
、l
for Rectangle
在主程序中指定时创建了一个形状的新实例,但这些值似乎也没有任何作用,因为输出始终为 0。传递给方法的参数与成员变量有什么关系?当调用 Circle
或 Rectangle
实例时通过参数集给出值时,如何为成员变量赋值?
这是我的代码:
abstract class BasicShape
{
protected double area;
public double getArea()
{
Console.WriteLine("Area: {0}", area);
return area;
}
public virtual void calcArea()
{
}
}
class Circle : BasicShape
{
private int centerX;
private int centerY;
private double radius;
public Circle(int x, int y, double r)
{
calcArea();
}
public int genCenterX()
{
return centerX;
}
public int genCenterY()
{
return centerY;
}
public override void calcArea()
{
area = 3.14159 * radius * radius;
Console.WriteLine("The area of the circle is: {0}", area);
}
}
class Rectangle : BasicShape
{
private int width;
private int length;
public Rectangle(int w, int l)
{
calcArea();
}
public int getWidth()
{
return width;
}
public int getLength()
{
return length;
}
public override void calcArea()
{
area = length * width;
Console.WriteLine("The area of the rectangle is: {0}", area);
}
}
public class TestShapes
{
static void Main(string[] args)
{
Circle circle1 = new Circle(2, 2, 5);
Rectangle rectangle = new Rectangle(6, 7);
Console.ReadLine();
}
}
作业说明如下:
定义一个名为 BasicShape 的纯抽象基础 class。
BasicShape class 应具有以下成员:
私有成员变量:
area,用于保存形状面积的双精度值。
Public 成员方法:
getArea():这个方法应该return成员变量area中的值。
calcArea(): 这个方法应该是一个纯虚方法。
接下来,定义一个 class 命名的 Circle。它应该来自 BasicShape class。它应该有以下成员:
私有成员变量:
centerX,一个整数,用于保存圆心的 x 坐标。
centerY,一个整数,用于保存圆心的 y 坐标。
radius, double 用于保存圆的半径。
Public 成员方法:
Circle(int x, int y, int r):接受 centerX、centerY 和 radius 的值。应该调用覆盖的 calcArea
方法如下所述。
genCenterX:return编辑了 centerX 中的值
genCenterY:return编辑中心 Y 中的值
calcArea():计算圆的面积(面积=3.14159 *半径*半径)并将结果保存在继承的成员区域中。
接下来,定义一个 class 命名的矩形。它应该来自 BasicShape class。它应该有以下成员:
私有成员变量:
width,一个整数,用来保存矩形的宽度
length,一个整数,用来保存矩形的长度
Public 成员方法:
Rectangle(int w, int l):接受宽度和长度的值。应该调用下面描述的重写的 calcArea 方法。
getWidth(): returns 宽度值。
getLength(): returns 长度值
calcArea():计算圆的面积(面积=长*宽)并将结果保存在继承的成员区域中。
创建这些 classes 后,创建一个定义 Circle 对象和 Rectangle 对象的主程序。
证明每个物体都正确计算并报告了它的面积。
您没有将从构造函数传递的值分配给您的成员变量。因此,当您调用 calcArea 时,您使用类型 int 或 double(为零)的默认值执行它
class Circle : BasicShape
{
private int centerX;
private int centerY;
private double radius;
public Circle(int x, int y, double r)
{
radius = r;
// Now you are executing the calcArea using the value passed in
calcArea();
}
....
}
class Rectangle : BasicShape
{
private int width;
private int length;
public Rectangle(int w, int l)
{
width = w;
length = l;
calcArea();
}
....
}
calcArea 的重写需要将成员变量设置为其他值,否则这些成员变量将使用它们的默认值(整数和双精度均为零)初始化,因此方法无法产生有意义的结果。
我正在完成一项具有非常具体说明的作业,如果有任何兴趣,我将 post 在我创建的代码下方。但是,简而言之,我要创建一个 BasicShape
摘要 class,以及一个 Circle
和 Rectangle
subclasses。每个subclass都有计算形状面积的方法。该面积是使用成员变量计算的。但是,在我下面的代码中,这些成员变量从未被赋值。我对如何将它分配给它们感到困惑,因为 Circle
和 Rectangle
方法也需要将参数传递给它们。这些参数 x
、y
、r
for Circle
和 w
、l
for Rectangle
在主程序中指定时创建了一个形状的新实例,但这些值似乎也没有任何作用,因为输出始终为 0。传递给方法的参数与成员变量有什么关系?当调用 Circle
或 Rectangle
实例时通过参数集给出值时,如何为成员变量赋值?
这是我的代码:
abstract class BasicShape
{
protected double area;
public double getArea()
{
Console.WriteLine("Area: {0}", area);
return area;
}
public virtual void calcArea()
{
}
}
class Circle : BasicShape
{
private int centerX;
private int centerY;
private double radius;
public Circle(int x, int y, double r)
{
calcArea();
}
public int genCenterX()
{
return centerX;
}
public int genCenterY()
{
return centerY;
}
public override void calcArea()
{
area = 3.14159 * radius * radius;
Console.WriteLine("The area of the circle is: {0}", area);
}
}
class Rectangle : BasicShape
{
private int width;
private int length;
public Rectangle(int w, int l)
{
calcArea();
}
public int getWidth()
{
return width;
}
public int getLength()
{
return length;
}
public override void calcArea()
{
area = length * width;
Console.WriteLine("The area of the rectangle is: {0}", area);
}
}
public class TestShapes
{
static void Main(string[] args)
{
Circle circle1 = new Circle(2, 2, 5);
Rectangle rectangle = new Rectangle(6, 7);
Console.ReadLine();
}
}
作业说明如下:
定义一个名为 BasicShape 的纯抽象基础 class。 BasicShape class 应具有以下成员:
私有成员变量: area,用于保存形状面积的双精度值。
Public 成员方法: getArea():这个方法应该return成员变量area中的值。 calcArea(): 这个方法应该是一个纯虚方法。
接下来,定义一个 class 命名的 Circle。它应该来自 BasicShape class。它应该有以下成员:
私有成员变量: centerX,一个整数,用于保存圆心的 x 坐标。 centerY,一个整数,用于保存圆心的 y 坐标。 radius, double 用于保存圆的半径。
Public 成员方法:
Circle(int x, int y, int r):接受 centerX、centerY 和 radius 的值。应该调用覆盖的 calcArea 方法如下所述。
genCenterX:return编辑了 centerX 中的值
genCenterY:return编辑中心 Y 中的值
calcArea():计算圆的面积(面积=3.14159 *半径*半径)并将结果保存在继承的成员区域中。
接下来,定义一个 class 命名的矩形。它应该来自 BasicShape class。它应该有以下成员: 私有成员变量:
width,一个整数,用来保存矩形的宽度 length,一个整数,用来保存矩形的长度
Public 成员方法:
Rectangle(int w, int l):接受宽度和长度的值。应该调用下面描述的重写的 calcArea 方法。
getWidth(): returns 宽度值。 getLength(): returns 长度值 calcArea():计算圆的面积(面积=长*宽)并将结果保存在继承的成员区域中。
创建这些 classes 后,创建一个定义 Circle 对象和 Rectangle 对象的主程序。
证明每个物体都正确计算并报告了它的面积。
您没有将从构造函数传递的值分配给您的成员变量。因此,当您调用 calcArea 时,您使用类型 int 或 double(为零)的默认值执行它
class Circle : BasicShape
{
private int centerX;
private int centerY;
private double radius;
public Circle(int x, int y, double r)
{
radius = r;
// Now you are executing the calcArea using the value passed in
calcArea();
}
....
}
class Rectangle : BasicShape
{
private int width;
private int length;
public Rectangle(int w, int l)
{
width = w;
length = l;
calcArea();
}
....
}
calcArea 的重写需要将成员变量设置为其他值,否则这些成员变量将使用它们的默认值(整数和双精度均为零)初始化,因此方法无法产生有意义的结果。