我有3个名为Student,Worker,People
的类,它们可能来自不同的项目。所有类都有两个相同的属性:name,age
。现在当我想将People
更改为{{1我必须编写一个名为Student
的方法,当我想将ChangePeopleToStudent
更改为People
时,我必须编写一个名为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
};
}
答案 0 :(得分:4)
创建一个接口(或基类 - 我假设我的例子中有一个接口),例如:
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
};
}
答案 1 :(得分:2)
.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; }
}