我有一个示例代码,我在一个类中声明变量,但是当我在方法中使用它们时,值变为零。请在下面找到更多详细信息。
class RectangleExample
{
double i;
double j;
public void GetValues()
{
i = 2.5;
j = 3.5;
}
public double GetArea()
{
return i * j;
}
public void Display()
{
Console.WriteLine("Length: {0}", i);
Console.WriteLine("width: {0}", j);
Console.WriteLine("Area: {0}", GetArea());
}
}
class ExecuteRectangle
{
static void Main(string[] args)
{
RectangleExample obj1 = new RectangleExample();
obj1.Display();
Console.ReadKey();
}
}
答案 0 :(得分:5)
您永远不会调用方法GetValues()
,因此不会为i
或j
分配任何值。 double
的默认值为0。
在致电GetValues()
之前,您需要致电Display()
。
class ExecuteRectangle
{
static void Main(string[] args)
{
RectangleExample obj1 = new RectangleExample();
obj1.GetValues(); // <-- HERE
obj1.Display();
Console.ReadKey();
}
}
或者,正如您所提到的那样,在构造函数中分配值。
public RectangleExample()
{
i = 2.5;
j = 3.5;
}
正如Thomas Schremser明智地在评论中指出的名称&#34; GetValues&#34;当方法没有得到任何东西时,这是不好的做法,也许是#34; SetValues&#34;至少稍好一点。
答案 1 :(得分:0)
在展示方法中,请在第一个GetValues
Console.WriteLine
方法
如果没有初始化变量值,则会显示空值,这些值将在GetValues
方法上初始化,并且您没有在代码中的任何位置调用它
答案 2 :(得分:0)
每个班级都有constructor
。每当创建class
时,Contructor
正在呼叫。
如果您没有为对象提供constructor
, C#将默认创建一个实例化对象并将成员变量设置为默认值。
您的代码没有constructor
所以您的属性(i,j)
设置了默认值(0)
您可以在GetValues
方法之前调用Display
方法,也可以使用我的样本。
所以试试这个
class RectangleExample
{
double i ;
double j ;
// class will be created calling `contructor`. Constructor will be call GetValues or set i , j values for my answer.
RectangleExample()
{
//i = 2.5;
//j = 3.5;
GetValues();
//or
i = 2.5;
j = 3.5;
//GetValues();
}
public void GetValues()
{
i = 2.5;
j = 3.5;
}
public double GetArea()
{
return i * j;
}
public void Display()
{
Console.WriteLine("Length: {0}", i);
Console.WriteLine("width: {0}", j);
Console.WriteLine("Area: {0}", GetArea());
}
}
答案 3 :(得分:-1)
尝试添加这样的getter和setter: (假设你在c#3.5上面工作)
赋予变量public
属性以及设置get/set
属性将确保您可以完全访问整个类及其外部的变量。
我确信有更好的方法可以解决这个问题,但这就是我的想法:
class RectangleExample
{
public double i{get;set;}=0;
public double j{get;set;}=0;
...
...
...
}