在C#中设置样式类

时间:2018-05-16 19:10:12

标签: c# class methods

我有一个名为Themes的类,它跟踪要在其他类中使用的颜色。该类包含各种不同的颜色,这些颜色根据日期而变化。

public class Themes
    var textColor;
    var contentColor;

    updateTheme()
    {
        updates colors
    }

我有两种方法可以访问这些字段。

theme = new Theme()
textColor = theme.textColor  

theme = new Theme()
textColor = theme.GetTextColor() 

样式类至少有20个字段。我知道两种方式都有效,我想知道哪种方法更好。 (将这些字段公开并将它们全部设为公开可以被认为是可以的吗?还是写20个GetMethods?)

2 个答案:

答案 0 :(得分:0)

您可以使用第一种方式(似乎使用属性),但就个人而言,我可能会这样做。

public enum ThemeColor
{
    TextColor,
    BackgroundColor,
    // Etc.
}

public ??? GetColor(ThemeColor color)
{
    // Return the requested color here
}

虽然这有点冗长。

textColor = theme.GetColor(ThemeColor.TextColor);

它可以使您的实现更简单。例如,您的颜色可能存储在数组或List<>中。因此,您可以将枚举转换为有效充当数组索引的整数。编写二十种方法或属性要简单得多。

我也觉得这种方法很可读。

答案 1 :(得分:0)

您应该使用的语言功能是属性。这些语法看起来像消耗代码的字段,但您可以实现自定义逻辑以获取或设置实现中的值。您也可以将它们限制为只读或写入(非常罕见)。

请参阅Microsoft C#编程指南:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/properties

语法就像这样写:

public class Foo {

    public Foo(int bar, string baz) {
        Bar = bar;
        Baz = baz;
    }

    public int Bar { get; set; } //Read/write property

    public string Baz { get; } //Readonly

    public bool IsFooEven {
       get { return Bar % 2 == 0; } //Calculated property
    }
}

消费者会看到这一点:

var foo = new Foo(5, "abc");

var bar = foo.Bar; //returns 5

var baz = foo.Baz; //returns "abc"

foo.Baz = "xyz"; //sets value

属性实际上是围绕编译程序集中的字段的get_Bar()set_Bar(int value)方法实现的,但C#使它们更好用。