C # Почему мы не можем переопределить статическое свойство?(как классы высокого уровня могут вызывать метод базового класса с данными высокого уровня) - PullRequest
5 голосов
/ 22 марта 2012

Мой вопрос, вероятно, не очень хорошо сформулирован, и, вероятно, это обман, но я пойду

class person {
    protected static string request = "select * from person where gender in ('male','female')";
    public string sharedmethod()
    {
        return "the request is" + request;
    }
}

class man:person
{
    override protected static string request = "select person.*,man.* from person,men where mytype in ('male') ";
    DateTime dateOfFirstCar;
}

class woman:person
{
    override protected static string request = "select person.*,woman.* from person,women where mytype in ('female') ";
    DateTime dateOfFirstITBAG;
}

class Program
{
    static void Main(string[] args)
    {
        if (new person().sharedmethod() == new man().sharedmethod())
            Console.Write("too bad query is the same in base and dervide class");
    }
}

Мужчина - это человек
Женщина - это человек
Человек, мужчина, женщина существуютв моей базе данных, но нужны разные запросы

Я не хочу дублировать эти запросы, поэтому я подумал, что было бы неплохо хранить их в статическом свойстве в каждом классе.

Я получил некоторые вещи низкого уровня (здесь не фигурировали), которые лежат в базовом классе (потому что я не хочу дублировать), и я хотел, чтобы унаследованные классы вызывали метод базового класса с контекстом наследуемых классов

Я хочу, чтобы мужчина. [Унаследованный] somemethod () выполнил person.somemethod (), но с переменными, исходящими от man

спасибо

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

Почему ты не можешь?Потому что дизайнеры .net решили, что это было больше проблем, чем стоило добавить это средство в платформу.

Что касается работы с вашим дизайном, есть много способов сделать его лучше ...

Можно было бы иметь статический вспомогательный класс, поместить в него sql как статические строки идобавьте статический метод, чтобы вернуть его, затем вызовите его из Person, Man Woman и т. д., поместите enum в Person и статический GetSql в класс помощника, и его работа выполнена.иначе люди не помогут тебе.

3 голосов
/ 22 марта 2012

Добавьте нестатическое свойство, охватывающее статическую строку, и вместо этого укажите ссылку на это свойство:

class person {
    private const string request = "select * from person where gender in ('male','female')";
    protected virtual string Request {get {return request;}}
    public string sharedmethod() {
        return "the request is" + Request;
    }
}

class man:person {
    private const string request = "select person.*,man.* from person,men where mytype in ('male') ";
    protected override string Request {get {return request;}}
    DateTime dateOfFirstCar;
}

class woman:person {
    private const string request = "select person.*,woman.* from person,women where mytype in ('female') ";
    protected override string Request {get {return request;}}
    DateTime dateOfFirstITBAG;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...