如何初始化类中声明的变量

时间:2017-02-28 09:48:40

标签: c# initialization

我有一个示例代码,我在一个类中声明变量,但是当我在方法中使用它们时,值变为零。请在下面找到更多详细信息。

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

4 个答案:

答案 0 :(得分:5)

您永远不会调用方法GetValues(),因此不会为ij分配任何值。 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;
...
...
...
}