Как Вы определяете действительно ли данный Тип (Система. Введите), наследовался определенному базовому классу (в .NET)?

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

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

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
25
задан Brandon Montgomery 30 November 2012 в 13:24
поделиться

3 ответа

32
ответ дан chakrit 28 November 2019 в 17:59
поделиться

Одна вещь разъясниться между Type.IsSubTypeOf() и Type.IsAssignableFrom():

  • IsSubType() возвратится true, только если данный тип получен из указанного типа. Это возвратится false, если данный тип БУДЕТ указанный тип.

  • IsAssignableFrom() возвратится true, если данный тип будет или указанным типом или полученный из указанного типа.

Поэтому, если Вы используете их для сравнения BaseClass и DerivedClass (который наследовался от [1 110]), затем:

BaseClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = FALSE
BaseClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE

DerivedClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE
23
ответ дан Yahoo Serious 28 November 2019 в 17:59
поделиться

РЕДАКТИРОВАНИЕ: Обратите внимание, что вышеупомянутое решение перестанет работать, если базовый тип, который Вы ищете, будет интерфейсом. Следующее решение будет работать на любой тип наследования, будет им класс или интерфейс.

// Returns true if "type" inherits from "baseType"
public static bool Inherits(Type type, Type baseType) {
    return baseType.IsAssignableFrom(type)
}

(Полу) Полезное извлечение из статья MSDN :

верный, если [аргумент] и текущий Тип представляет тот же тип, или если текущий Тип находится в иерархии наследования [аргумент], или если текущий Тип является интерфейсом, что [аргумент] реализации, или если [аргументом] является универсальный параметр типа и текущий Тип, представляет одно из ограничений [аргумент]. ложь, если ни одно из этих условий не верно, или если [аргументом] является нулевая ссылка (Ничто в Visual Basic).

22
ответ дан Chris Marasti-Georg 28 November 2019 в 17:59
поделиться
Другие вопросы по тегам:

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