2016-02-04 5 views
-2

У меня есть два класса. Один из них - это класс Base, который унаследован в классе Child.Как создать объект базового класса из объекта дочернего класса

public class Employee 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

public class Manager : Employee 
{ 
    public decimal Salary { get; set; } 
    public Employee GetEmployee() 
    { 
     // return employee object. 
    } 
} 

Теперь мне нужно получить объект класса Employee через Manager объект класса.

Manager manager = new Manager(); 
manager.FirstName = "A"; 
manager.LastName = "B"; 
manager.Salary = 25000; 

Employee employee = manager.GetEmployee(); 

Я не уверен, если это возможно, но я не хочу назначать определенное свойство по одному.

Пожалуйста, предложите лучший вариант.

+0

u может использовать конструктор – Meetesh

+2

У вас уже есть свойства Employee, доступные через объект Manager, в Менеджере нет отдельного объекта Employee. – Adil

ответ

2

Manager является Employee, так что вы можете просто вернуть this:

public Employee GetEmployee() 
{ 
    return this; 
} 

Это не совсем ясно, что цель метода GetEmployee, потому что вы можете использовать Manager везде вам нужно Employee:

public void SomeMethodThatAcceptsEmployee(Employee emp) 
{ 
} 

Employee employee = new Employee(); 
Manager manager = new Manager(); 

// You can call this method passing Employee: 
SomeMethodThatAcceptsEmployee(employee); 
// But you can also call this method passing Manager: 
SomeMethodThatAcceptsEmployee(manager); 
1

У вас уже есть объект Employee с объектом Manager. Если, например, у вас есть метод печати полного имени сотрудника, например,

void PrintFullName(Employee e) 
{ 
    Console.WriteLine("{0} {1}", e.FirstName, e.LastName)); 
} 

вы можете просто вызвать эту функцию с помощью объекта менеджера, например

Manager m = new Manager(); 
m.FirstName = "M"; 
m.LastName = "S"; 
m.Salary = 10000; 
PrintFullName(m); 

Основного наследства, я не понимаю, зачем вам нужен метод GetEmployee.

+0

Мне нужен объект Employee, потому что у меня есть другой проект, в котором только класс Employee доступен, а не класс Manager, и ему необходимо передать этот объект Employee в методе этого проекта. – user2878759

+1

@ user2878759 «Управляющий» - это «Сотрудник». То, о чем вы просите, было бы необходимо, если вы не использовали наследование, но любая функция, которая принимает «Employee», может быть передана объекту «Менеджер». – crashmstr

0

Вам не нужно добавлять метод к классу Manager, вы можете просто указать его с помощью оператора as, если вам нужно получить прямую ссылку на Employee без свойств менеджера.

var employee = manager as Employee; 

Или, если у вас есть функция

public void DoStuff(Employee employee) 
{ 
} 

Вы можете назвать его просто с

DoStuff(new Manager()) 
0

Вот общий путь с помощью отражения

public class Employee 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
    } 

    public class Manager : Employee 
    { 
     public decimal Salary { get; set; } 
     public T GetEmployee<T>() 
     { 
      var emp = Activator.CreateInstance<T>(); 
      var properties = emp.GetType().GetProperties(); 
      foreach (var property in properties) 
      { 
       property.SetValue(emp, property.GetValue(this)); 
      } 
      return emp; 
     } 
    } 

вызова его с помощью

Employee employee = manager.GetEmployee<Employee>(); 
+0

Спасибо, это сработало. – user2878759

+0

уверен, что это будет, это отражение и общее) –

+0

Хотя технически правильно, я не вижу ситуации, когда это имеет смысл? Но я могу пропустить что-то в этом вопросе. – marco

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