我有以下课程:
播放器管理器有一个Player类数组,Client类是Player的组合,具有私有访问权限,因为我不需要用户看到客户端界面。
一切都很好,除了我想使用数组固定长度而不是列表的问题。 客户端类是在运行时确定的,如果我想初始化一个播放器,我需要直接在属性上设置它或使用setter方法,这迫使我将客户端组合设置为公共。
List在这个问题上运行得非常好,因为我可以在Player类的构造函数上设置Client属性,但是想法是使用数组固定长度,因为它更快。是否有任何工作要将Client保持为私有并将其设置为Player Manager类?
public class PlayerManager
{
public Player[] players { get; set; }
public PlayerManager(int maxplayers)
{
players = new Player[maxplayers];
}
public void Add(Client client)
{
Player player = FindPlayerSlot();
player.client = client; //cant do this, client is private property
}
}
public class Player
{
private Client client { get; set; } //Need to hide this from user
//I can set a constructor here for set the client property, but this would
//force me to use a list.
}
答案 0 :(得分:1)
尝试将其设为internal
属性。 internal
关键字使得类型或成员在其定义的程序集之外不可见。
假设这一切都在一个程序集中,用户将引用您的程序集并使用它。如果您有多个程序集需要内部可见,则可以使用[assembly: InternalsVisibleTo("MyOtherAssembly")]
来定义唯一可以访问标记为内部成员的其他程序集。
此外,List<Client>
不会比固定数组慢,除非它正在调整大小。如果使用List constructor with an initial capacity,则可以获得与固定数组相同的性能。
答案 1 :(得分:0)
为什么不让
FindPlayerSlot(); // return a int type ?
并通过构造函数设置客户端属性?
int playerid = FindPlayerSlot();
if (playerid > -1)
{
Player player = new Player(client);
}
添加构造函数
公共类播放器 { 私人客户客户{get;组; } //需要隐藏此用户
//I can set a constructor here for set the client property, but this would
//force me to use a list.
public Player(Client client)
{
this.client = client;
}
}