2016-05-15 120 views
0

我想要一个修改现有成员变量并设置修改后的值的类方法。修改和设置类成员变量的类方法

实施例:

public class Animal 
{ 
    public string color { get; set; } 

    public string getColor 
    { 
     get 
     { 
      return color; 
     } 
    } 

    public string convertColor 
    { 
     set 
     { 
      this.color = this.colorConversion(); 
     } 
    } 

    public string colorConversion() 
    { 
     string number = this.getColor; 
     switch (number) 
     { 
      case "0": 
       return "Lighter"; 
      case "1": 
       return "Good!"; 
      case "2": 
       return "Darker"; 
      default: 
       return "Fix this somehow!"; 
     } 
    } 

} 

因此,当我实例化对象,我只需要使用一个线做转换

如:

Animal cow = new Animal(); 
cow.convertColor; 

而不是具有多个线如:

Animal cow = new Animal(); 
string currentColor = cow.getColor; 
cow.setColor = cow.colorConversion(currentColor); 

请帮我理解它是否可能。

+1

那些'getColor'和'setColor''方法'是没有必要的 - 'color'属性本身已经有一个getter和setter。而且,忽略属性设置器中给定的“值”不是其他程序员期望的。字符串是否真的是正确的类型? ''Friday“'是一个有效的字符串,但它不是一个有效的颜色......不管怎样,为什么'Animal'需要从数字字符串转换为颜色名称 - 这些数字和颜色名称之间有什么样的关系? –

+0

哎呀,谢谢你抓住这些! :-) 字符串类型是因为我从api获取字符串返回值(一个数字),我需要将它转换为不同格式的字符串。 – wsgb

回答

1

首先,您只需要一个或另一个:

public string color { get; set; } 

OR

public string getColor 
     { 
      get 
      { 
       return color; 
      } 
     } 

您在这里混两件事情,一个具有不变性getColor和其他具有可变性color因此您需要决定是否要最终用户能够getget and set该属性。

其次,您希望在实例化类的颜色转换....这是奇怪的,因为当你实例化类,color将是一个空字符串,并有没有颜色。第三,如果你使用构造函数来创建一个类并传递颜色 - 像这样new Animal("blue") - 那么为什么当你从属性中获取时将其转换 - 因为现在你将这个属性的函数遮蔽到了末尾用户。这不符合最小惊讶的原则。

所以你可以做的是从类中抽象转换,使其更加明显。

class AnimalColorConverter 
{ 
    public void ConvertColor(Animal animal) 
    { 
     animal.color = colorConversion(animal.color); 
    } 

    private string colorConversion(input) 
    { 
     switch (input) 
     { 
      case "0": 
       return "Lighter"; 
      case "1": 
       return "Good!"; 
      case "2": 
       return "Darker"; 
      default: 
       return "Fix this somehow!"; 
     } 
    } 
} 

然后你的线条将成为:

var converter = new AnimalColorConverter(); 
var animal = new Animal(); 
animal.color = "1"; 
converter.ConvertColor(animal); 

什么你还需要考虑的是简洁并不总是一件好事,当你回来到这一个班轮在6个月的时候,你会了解它在做什么?

最后,如果我还没有理解你的班级正在尝试做什么并且没有完全回答 - 那是因为从你的代码我不明白你想要达到什么,这是指6个月问题。在编写代码时,你应该练习正确地命名事物,如果名称太长,它会试图做很多事情(SOLID原则的部分关注点分离)。

所以从我的代码中,我有一个名为AnimalColorConverter的类,它几乎就描述了这个类的功能。然后我有一个叫做ConvertColor的方法,它也很接近描述这个函数的功能。如果我知道您的switch声明中代表"0",我可以更好地为它们命名。我认为"Lighter"是一种颜色的等级。所以我可以命名我的功能ColorGrader,然后我期望颜色的等级出来。

+0

太棒了,谢谢! – wsgb