我想有一个类方法来修改现有的成员变量并设置修改后的值。
示例:
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);
请帮助我了解是否有可能。
答案 0 :(得分:0)
首先,你只想要一个或另一个:
UuidCreate
或强>
public string color { get; set; }
您在这里混合了两件事,一件具有不变性public string getColor
{
get
{
return color;
}
}
而另一件具有可变性getColor
,因此您需要决定是否希望最终用户能够color
或{ {1}}财产。
其次,您希望在实例化类时转换颜色....这很奇怪,因为当您实例化类时,get
将是一个空字符串并且没有颜色
第三,如果你使用构造函数来创建一个类并传入颜色 - 就像get and set
那样 - 那么为什么当你从属性中转换它时,因为现在你模糊了这个属性的功能到最终用户。这并不遵循最不惊讶的原则。
所以你能做的就是将转换抽象出来,使其更加明显。
color
然后你的行将成为:
new Animal("blue")
你还需要考虑的是简洁并不总是一件好事,当你在6个月后回到这个班轮时,你会明白它在做什么吗?
最后,如果我还没有理解你的课程正在尝试做什么并且没有完美地回答 - 那是因为从你的代码中我无法理解你想要实现的目标,这可以追溯到6个月的问题。在编写代码时,你应该练习确切地命名它们所做的事情,如果名字太长,它就会尝试做很多事情(将关注点分离为SOLID原则的一部分)。
因此,从我的代码中,我有一个名为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);
的方法,它也非常接近于描述这个函数的功能。如果我知道AnimalColorConverter
声明中代表ConvertColor
的内容,我可以更好地命名它们。我假设"0"
是颜色的等级。所以我可以命名我的函数switch
然后我会期望颜色的等级出来。