Настройка класса стилей в C # - PullRequest
0 голосов
/ 16 мая 2018

У меня есть класс под названием Темы, который отслеживает цвета, которые будут использоваться в других классах.Класс содержит различные цвета, которые меняются в зависимости от дня.

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 голосов
/ 16 мая 2018

Языковая функция, которую вы должны использовать, это свойства. Они синтаксически выглядят как поля для потребления кода, но вы можете реализовать собственную логику для получения или установки значений в реализации. Вы также можете ограничить их только для чтения или записи (очень редко).

См. Руководство по программированию на 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 # делает их более привлекательными для использования.

0 голосов
/ 16 мая 2018

Вы могли бы использовать первый способ (который, кажется, использует свойство), но лично я мог бы сделать что-то вроде этого.

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

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

Хотя это немного более многословно.

textColor = theme.GetColor(ThemeColor.TextColor);

Это может сделать вашу реализацию более простой.Например, может быть, ваши цвета хранятся в массиве или List<>.Таким образом, вы можете просто преобразовать перечисление в целое число, которое эффективно служит индексом в вашем массиве.Гораздо проще, чем писать двадцать методов или свойств.

Я также считаю этот подход вполне читабельным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...