2015-02-08 95 views
1

我试图修改“设置”部分,但这些更改似乎根本没有发生。下面是显示了相同的结果基本代码:获取和设置属性似乎被忽略(C#)

class Class1 
{ 
    private int num; 

    public Class1(int number) 
    { 
     num = number; 
    } 
    public int getNumber 
    { 
     get 
     { 
      return num; 
     } 
     set 
     { 
      if (value > 0) 
       num = value; 
      else 
       num = 0; 
     } 
    } 
} 

在这里,我想作任何负值的0

class Program 
{ 
    static void Main(string[] args) 
    { 
     Class1 c1 = new Class1(10); 
     Class1 c2 = new Class1(-10); 

     Console.WriteLine(c1.getNumber); 
     Console.WriteLine(c2.getNumber); 
     Console.ReadLine(); 
    } 
} 

结果给我

10 -10

我试过使用

 set 
     { 
      num = 100; 
     } 

但结果仍然没有变化。我试着用我正在使用的书进行双重检查,并且没有区别,我可以看到。如果它意味着什么,我正在使用Visual Studio 2012。

回答

2

你的代码是不是要求集您财产的一部分。因为,你只是在调用构造函数。而在你的构造函数中,你只是为后台变量设置临时值(num)。
另外,by convention,您的班级成员名称不合适。 将其更改为:

NUM - >数
getNumber - >数

试试这个:

Class1 c1 = new Class1(); 
c1.Number = -10; // The set accessor is invoked here 
int myNumber = c1.Number; // The get accessor is invoked here 


如果你想通过你的构造函数来调用set访问,然后更改您的构造函数为:

public Class1(int number) 
{ 
     Number = number; 
} 

然后,它会调用适当的set访问:

Class1 c1 = new Class1(10); // The set accessor will be invoked 


不要忘记改变你的类实现为:

class Class1 
{ 
    private int number; 

    public int Number 
    { 
     get { return number; } 
     set 
     { 
      if (value > 0) 
       number = value; 
      else 
       number = 0; 
     } 
    } 

    // If you do provide a constructor (any constructor with any signature), 
    // the parametrless constructor will not be generated 
    public Class1() 
    { 
    } 

    public Class1(int number) 
    { 
     Number = number; 
    } 
} 

this from msdn了解更多信息。

+0

啊我现在看到了。谢谢!你能告诉我为什么应该按照这种方式组织班级实施吗? – Alex 2015-02-08 18:50:52

+0

@Alex因为,这是惯例。编码约定是针对特定编程语言的一组准则。强烈建议软件程序员遵循这些指导原则,以帮助提高其源代码的可读性并使软件维护更为简单。我建议阅读[this](http://en.wikipedia.org/wiki/Coding_conventions)。 – 2015-02-08 19:10:16

2

试试这个:

class Class1 
{ 
    private int num; 

    public Class1(int number) 
    { 
     Number = number; 
    } 
    public int Number 
    { 
     get 
     { 
      return num; 
     } 
     set 
     { 
      if (value > 0) 
       num = value; 
      else 
       num = 0; 
     } 
    } 
} 

你没有正确implented它。其实更好的implmentation是以下几点:

class Class1 
{ 
    // The backing field has the same name as the Property 
    // but all letters must be lowercase. 
    private int number; 

    public int Number 
    { 
     get { return number; } 
     set 
     { 
      if (value > 0) 
       number = value; 
      else 
       number = 0; 
     } 
    } 

    // In the constructor we set the value of the backing fields 
    // using the corresponding properties. 
    public Class1(int number) 
    { 
     Number = number; 
    } 
} 

将要设置的number价值或得到它的使用相应的属性值每次:

// Set the value 2 to the number 
Number = 2; 

// Read the value stored in number and assigned to value. 
var value = Number; 
+0

可以请downvoter解释我以上哪里错了?谢谢 – Christos 2015-02-08 08:59:52