2016-10-21 1 views
1

Я довольно новичок в C#, и я изо всех сил старался найти уже ответный вопрос, похожий на мой, но я просто не мог получить ответы на мой вопрос.C# Проверка, является ли класс X, или унаследован от X

Итак, У меня есть класс «Экземпляр», который должен быть суперклассом для всех игровых объектов. Она имеет только для чтения ClassName свойство определяется как например:

public string ClassName 
    { 
     get 
     { 
      return this.GetType().Name; 
     } 
    } 

И моя причина для этого вопроса является то, что я хочу иметь следующий метод, который будет возвращать истину, если текущий объект является экземпляром Classname, или если класс объекта наследуется от классаName.

public bool IsA(string className) 
    { 
     //TODO 
    } 

Это должно быть рода- "рекурсивный", так что, если дело было: X: Class1: Class2: Class4 затем X.IsA (Class4) возвращает истинное

I Я посмотрел на методы типа object.GetType(), но я не понял решения.

Любые идеи?

+0

Это должно быть рода- "рекурсивный", так что, если дело было: X: Class1: Class2: Class4 тогда X .IsA (Class4) вернет true – Elmub

+0

Взято из принятого ответа в повторяющемся потоке: * 'is' возвращает' true', если экземпляр находится в дереве __inheritance __. * Соответствующая документация: [is (C# Reference)] (https: //msdn.microsoft.com/en-us/library/scekt9xw.aspx). – sstan

+0

Да, я просто прочитал, что, но одна проблема все еще сохраняется, мой параметр - строка не класса – Elmub

ответ

1

Просто используйте заявление is или as. as попытается применить его к цели и будет иметь значение null, если произойдет сбой (из памяти).

Вот быстрый LINQPad демо (заменить "yep".Dump()" с Console.Out.Write("yep"); для VS):

void Main() 
{ 
    var b = new bar(); 

    if (b is foo) 
     "yep".Dump(); 
    else 
     "nope".Dump(); 

    var b2 = new bar(); 
    var b3 = b2 as foo; 
    // you can check if b3 is null, or if not, use it a foo. 

} 


class foo {} 

class bar : foo {} 
+0

Вы говорите, что используете 'as', но затем не показываете его в использовании. – mason

+0

Проверяет ли «b foo», например, если b наследуется от класса, наследуемого foo? – Elmub

+2

@ user3524922 Что мешает вам сначала проверить документацию? – zerkms

 Смежные вопросы

  • Нет связанных вопросов^_^