2015-05-20 7 views
3

У меня есть класс, как этотПолучить имя класса из класса, расширяющие его

public class BaseClass 
    { 
     public string Request { get; set;} 
    } 

и у меня есть класс, как это:

public class ExtendClass : BaseClass 
{ 

} 

Так на самом деле запрос свойство всегда будет установить с имя ExtendClass. Так это на самом деле будет Request="ExtendClass"

У меня есть много классов, которые расширяют BaseClass. Я знаю, что могу просто передать ему строку, но возможно ли это сделать?

+1

Выработать больше на вопрос. Вы хотите, чтобы каждый раз, когда был создан расширенный класс, он должен установить Request = "ExtendClass"? – Amit

+1

Полностью непонятно, что вы ищете, вы хотите установить свойство Request, когда вызывается какой-либо дочерний класс, наследующий BaseClass, что-то вроде, когда вызывается ExtendedClass, тогда вы должны иметь возможность установить свойство Request. Вы можете использовать конструктор для его использования. –

+1

@blueboyz. Метод [Object.GetType] (https://msdn.microsoft.com/en-us/library/system.object.gettype.aspx) не работает для вас? – IronGeek

ответ

7

Вы можете использовать object.GetType, который всегда будет возвращать тип сверху в иерархии (так что последний класс, происходящий):

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

Name возвращает короткое имя типа, без имен. Если вы тоже этого хотите, вы должны использовать FullName.

2

У вас есть несколько вариантов. Например, вы можете использовать отражение:

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

Или вы можете сделать его более явным, с абстрактным свойством (и таким образом вы можете указать не только имена классов):

public abstract class BaseClass 
{ 
    public abstract string Request { get; } 
} 
class ExtendClass : BaseClass 
{ 
    public override string Request { get {return "ExtendClass"; } } 
} 
Смежные вопросы