У меня есть 3 класса под названием " Student,Worker,People
которые могут поступать из разных проектов. Все из них имеют одно и то же свойство: name,age
Теперь, когда я хочу изменить " People
к Student
, мне нужно написать метод ChangePeopleToStudent
, когда Я хочу изменить People
to Worker
, мне нужно написать метод под названием ChangePeopleToWorker
Я пытаюсь использовать общие методы для записи только одного метода, но кажется неправильным. Как его исправить?
Три классифицированных
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public int MathPoint { get; set; }
}
public class Worker
{
public string Name { get; set; }
public int Age { get; set; }
public string WorkPlace { get; set; }
}
public class People
{
public string Name { get; set; }
public int Age { get; set; }
public string Country { get; set; }
}
Мой метод изменения
public static Student ChangePeopleToStudent(People people)
{
return new Student
{
Name = people.Name,
Age = people.Age
};
}
public static Worker ChangePeopleToWorker(People people)
{
return new Worker
{
Name = people.Name,
Age = people.Age
};
}
Общие методы: как это исправить?
public static T ChangePeopleToWorker<T>(People people)
where T : Student, Worker,new T()
{
return new T
{
Name = people.Name,
Age = people.Age
};
}
Создайте интерфейс (или базовый класс - я предполагаю интерфейс в моем примере), например:
public interface IPerson
{
string Name { get; set; }
int Age { get; set; }
}
Он должен быть реализован всеми вашими классами. Тогда вы сможете написать:
public static T ChangePersonTo<T>(IPerson person)
where T : IPerson, new T()
{
return new T
{
Name = person.Name,
Age = person.Age
};
}
.NET не поддерживает множественное наследование, поэтому, where T: Student, Worker
не является правдоподобным. Если вы хотите, чтобы T был либо Student
либо Worker
вам нужно определить общий базовый класс (или интерфейс) или определить два разных метода.
Если People
должны быть общим классом между двумя, вы можете упростить свои занятия:
public class Student : People
{
public int MathPoint { get; set; }
}
public class Worker : People
{
public string WorkPlace { get; set; }
}
public class People
{
public string Name { get; set; }
public int Age { get; set; }
public string Country { get; set; }
}
where T: SomeClass, SomeUnrelatedClass
и как это работает. Вы бы никогда не выполнили оба условия.where T : SomeBaseClass
.