В C# я могу знать в базовом классе что дочерние элементы, наследованные от меня?

См. Описание ApprovedStates Enumeration в Документах Microsoft:

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

blockquote>

Члены этого перечисления перечислены ниже:

Любой - включает все обновления, независимо от того, утверждены они, отклонены или не утверждены.

Отклонено - Включает обновления, которые были отклонены.

HasStaleUpdateApprovals - Включает в себя обновления, имеющие одобрение на редакцию, которая не является последней редакцией.

LatestRevisionApproved - Включает в себя обновления, последняя версия которых утверждена.

NotApproved - Включает обновления, которые не были утверждены или отклонены.

blockquote>

Теперь вопрос о том, почему замененные обновления все еще отражаются после этого условия, заключается в том, что они не должны проверять поведение замены. Они используются для проверки состояния утверждения (утверждено, отклонено, не утверждено). Последняя редакция - это когда Microsoft продолжает обновлять / пересматривать обновление после его первоначального выпуска.

Если вы хотите определить поведение замены, $updateinfo.IsSuperseded - это вариант, на который можно положиться.

5
задан Johnny Bones 2 April 2015 в 22:45
поделиться

4 ответа

Вызов GetType() от Механизма. Пойдите (), работал бы - но только если Идут (), был на самом деле назван.

Один способ осуществить это состоит в том, чтобы использовать шаблонный шаблон метода:

public abstract class Vehicle 
{
    public void Go()
    {
        Log("vehicle {0} fired", GetType().Name);
        GoImpl();
    }

    protected abstract void GoImpl();
}

public class Car : Vehicle
{
    protected override void GoImpl()
    {
        // do something
    }
}
15
ответ дан 18 December 2019 в 06:52
поделиться

это. GetType () даст Вам тип текущего экземпляра

4
ответ дан 18 December 2019 в 06:52
поделиться

Ответ Jon Skeet, конечно, сделал задание, но я для каждому действительно не нравится реализация. Я предпочитаю следующее, которое сохраняет его - по-моему - простым.

Так или иначе.NET оказывает поддержку для этой функциональности уже посредством виртуальных методов.

public class Vehicle {
    public virtual void Go() {
          Log(this.GetType().Name);
    }
}

public class Car : Vehicle {
    public override void Go() {
         base.Go();
         // Do car specific stuff
    }
}

public class Bus : Vehicle {
}

Это будет работать, обращаетесь ли Вы к экземпляру, он - базовый класс или его фактический класс. Это не вынуждает Вас изменить реализацию в основных классах и хорошо... всех других, объект ориентировал правильность.NET.

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

2
ответ дан 18 December 2019 в 06:52
поделиться

Как насчет этого:

GetType().Name
2
ответ дан 18 December 2019 в 06:52
поделиться
Другие вопросы по тегам:

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