从子类中只获取超类的属性
本文关键字:超类 属性 获取 子类 | 更新日期: 2023-09-27 18:27:39
我有一个包含一些属性的类,还有一个从该类继承的类,它添加了一些额外的属性。不幸的是,我只能从数据服务中获取继承的类。但我只需要超类上的属性。如何才能做到这一点?
我有以下课程:
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的对象。。。
正如我正确理解的那样,方法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);
如果经常这样做,您可能会考虑创建一个通用方法,并使用反射将属性从第一个对象复制到下一个对象。