我有一个包含一些属性的类,以及一个继承自该类的类,它添加了一些其他属性。不幸的是,我只能从数据服务中获取继承的类。但我只需要超类的属性。如何实现这一目标?
我有以下课程:
namespace MA.ECCA.WebServices
{
public class Player
{
Public Player();
public string fname{get; set;}
public string lname{get; set;}
}
public class PlayerData : Player
{
public PlayerData();
public Stats stats {get; set;}
}
}
给定一个PlayerData类型的对象,我怎么能得到一个只有Player属性的对象?
我尝试了以下内容:
Player player = GetPlayerStats();//returns object of type PlayerStats populated with data
和...
Player player = (Player)GetPlayerStats();
在这两种情况下,我都得到了所有数据,我只想要一个包含fname和lname的对象......
答案 0 :(得分:2)
据我所知,方法GetPlayerStats
始终返回PlayerData
类型的对象。我知道这不能改变,你希望收到更少的数据(没有统计数据,只有名字和姓氏)。
某种类型的物体始终保持不变;它将始终保持相同的成员。它不会突然变小。将其投射到Player
甚至object
会使某些/所有属性的可见性降低,但它们仍然在该对象内。
在您的情况下,您应该创建一个全新的Player
类型的实例,并将数据从第一个对象复制到新对象。例如:
public class Player
{
public Player();
public Player(Player original)
{
fname = original.fname;
lname = original.lname;
}
public string fname{get; set;}
public string lname{get; set;}
}
...
PlayerData playerData = GetPlayerStats();
Player player = new Player(playerData);
如果经常这样做,您可以考虑创建一个通用方法并使用反射将属性从第一个对象复制到下一个对象。