从子类中只获取超类的属性

本文关键字:超类 属性 获取 子类 | 更新日期: 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);

如果经常这样做,您可能会考虑创建一个通用方法,并使用反射将属性从第一个对象复制到下一个对象。