修改和设置类成员变量

时间:2016-05-15 11:12:03

标签: c#

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

示例:

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 个答案:

答案 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然后我会期望颜色的等级出来。