2017-01-23 90 views
0

我在学习C#,并且要求最佳方法与此类中的类的变量进行交互。我想过这个:C#与其他类中的类的变量进行交互

public class Character 
    { 
     private int x, y; 

     public Character(int posX, int posY) 
     { 
      x = posX; 
      y = posY; 
     } 

     public int X 
     { 
      get 
      { 
       return x; 
      } 
      set 
      { 
       x = value; 
      } 
     } 

     public int Y 
     { 
      get 
      { 
       return y; 
      } 
      set 
      { 
       y = value; 
      } 
     } 
    }` 

    class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      Character hero = new Character (42, 36); 
      Console.WriteLine (hero.X); 
      Console.WriteLine (hero.Y); 
      hero.X = 5; 
      Console.WriteLine (hero.X); 
     } 
    } 

我不知道这种方法是好还是优化,但它的工作原理。但是,如果我想为10个变量执行此操作,则我的班级将尽可能少(如果我想在get/set中添加一个测试,则该班级最多)100行,仅用于我的变量... 您是否知道其他方法继续?或者我可以如何压缩这种方法? 谢谢!如果您需要更新很多其他类的变量考虑重新设计你的代码

public class Character 
{ 
    public Character(int x, int y) 
    { 
     X = x; 
     Y = y; 
    } 

    public int X { get; set; } 
    public int Y { get; set; } 
} 

而且在现实生活中:

+0

类似:http://softwareengineering.stackexchange.com/questions/133015/private-variable-vs-property –

回答

0

这种类型的变量被称为属性,它用于我希望变量可以被其他对象读取和编辑的情况,所以它是解决您的问题的最佳方案,即使您将增加属性数量或添加检查在get/set中。 继续!

4

您可以使用auto-implemented properties。可能你已经将数据和逻辑分成两个不同的类。考虑将两个类组合成一个具有处理该数据的数据和逻辑。

注意:有大的更新到正在添加的C#下一个版本叫做Record Types,让您只列出类名后所有的类属性:

class Character(int X, int Y); 

这是一个好语法糖数据传输对象。

+0

记录不是在C#7的到来,有可能我记得在他们的github上阅读它,但它也记录在记录部分顶部的链接中。 – pinkfloydx33

0

除了自动属性,您可以使用Object initializer。在这种情况下,你不需要明确地声明一个构造函数。您可以使用该功能保存更多的代码行。检查下面的代码,看到的变化:

public class Character 
{  
    public int X { get; set; } 
    public int Y { get; set; } 
} 


class MainClass 
{ 
    public static void Main (string[] args) 
    { 
     var hero = new Character {X = 42, Y = 36}; 
     Console.WriteLine(hero.X); 
     Console.WriteLine(hero.Y); 
     hero.X = 5; 
     Console.WriteLine (hero.X); 
    } 
}