удрученный и восходящий

Во многих ситуациях можно поставить скомпилированные в байт .pyc файлы вместо .py исходных файлов. Это дает Вам некоторый уровень путаницы. Как pyobfuscate README предполагает, это имеет ограничения. Но Вы можете комбинировать два подхода.

80
задан meJustAndrew 29 October 2016 в 08:42
поделиться

2 ответа

  1. Верно. Когда вы это делаете, вы преобразуете его в объект employee , что означает, что вы не можете получить доступ к чему-либо, относящемуся к конкретному менеджеру.

  2. Понижающее преобразование - это когда вы берете базовый класс, а затем пытаетесь превратить его в более конкретный класс. Этого можно добиться с помощью is и явного приведения типа этого:

     if (сотрудник - менеджер)
    {
     Менеджер m = (Менеджер) сотрудник;
     // что-то с этим делать
    }
    

или с оператором as следующим образом:

Manager m = (employee as Manager);
if (m != null)
{
    //do something with it
}

Если что-то неясно, я буду рад исправить это!

83
ответ дан 24 November 2019 в 09:56
поделиться

Повышение качества (с использованием ( Employee) someInstance ) обычно прост, поскольку компилятор может сообщить вам во время компиляции, является ли тип производным от другого.

Понижающее преобразование , однако, должно выполняться во время выполнения, как правило, поскольку компилятор не всегда может знать, относится ли рассматриваемый экземпляр к заданному типу. C # предоставляет для этого два оператора - is , который сообщает вам, работает ли понижающее преобразование, и возвращает true / false. И как , который пытается выполнить приведение и возвращает правильный тип, если это возможно, или null, если нет.

Чтобы проверить, является ли сотрудник менеджером:

Employee m = new Manager();
Employee e = new Employee();

if(m is Manager) Console.WriteLine("m is a manager");
if(e is Manager) Console.WriteLine("e is a manager");

Вы также можете использовать этот

Employee someEmployee = e  as Manager;
    if(someEmployee  != null) Console.WriteLine("someEmployee (e) is a manager");

Employee someEmployee = m  as Manager;
    if(someEmployee  != null) Console.WriteLine("someEmployee (m) is a manager");
47
ответ дан 24 November 2019 в 09:56
поделиться
Другие вопросы по тегам:

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