georgich
@georgich

Как использовать статическое свойство из дочернего класса?

Приветствую!
Есть следующий код:
public abstract class ActiveRecordEntity
    {
        protected int Id { get; set; }

        protected static string TableName { get; }

        public static DataTable DataTable
        {
            get
            {
                var schemaTable = new DataTable { Locale = CultureInfo.InvariantCulture };
                
                var dataAdapter = new SQLiteDataAdapter
                {
                    SelectCommand = new SQLiteCommand("SELECT * FROM " + TableName + ";", Database.Connection)
                };

                dataAdapter.Fill(schemaTable);

                return schemaTable;
            }
        }
    }
    public class Category : ActiveRecordEntity
    {
        public string Title { get; set; }
        protected static string TableName => "category";
    }

Мне нужно, чтобы в базовом классе в свойство TableName попадало свойство с названием таблицы из дочернего класса. Пока реализовать не получается. Подскажите, пожалуйста, как быть? Спасибо.
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
sarapinit
@sarapinit Куратор тега C#
Точу водой камень
Я бы отказался от использования глобального состояния. Если вам действительно нужен один экземпляр, то создавайте его явно в корне приложения и переиспользуйте или доверьте эту обязанность IoC контейнеру.
Реализация без глобальных переменных:

public abstract class ActiveRecordEntity
    {
        protected int Id { get; set; }

        public readonly string TableName;
        public DataTable DataTable { get; }

        public ActiveRecordEntity(string tableName, SQLiteConnection connection)
        {
            TableName = tableName;
            DataTable = new DataTable { Locale = CultureInfo.InvariantCulture };
            var dataAdapter = new SQLiteDataAdapter
            {
                SelectCommand = new SQLiteCommand($"SELECT * FROM {TableName}", connection)
            };

            dataAdapter.Fill(DataTable);
        }
    }
    public class Category : ActiveRecordEntity
    {
        public string Title { get; set; }
        public Category(SQLiteConnection connection) : base("category", connection)
        {
        }
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы