gpt4 book ai didi

c# - 将装饰器模式与抽象类一起使用

转载 作者:行者123 更新时间:2023-11-30 21:41:44 26 4
gpt4 key购买 nike

我可以通过更改属性名称的输出来装饰抽象类播放器吗?例如我的类(class)是:

public abstract class Player
{
private FootBall ball;

private string name;

public Player(FootBall ball, string name)
{
this.name = name;
this.ball = ball;
}

public string Name
{
get
{
return this.name;
}
}


public virtual void Update()
{
Console.WriteLine(string.Format("Player {0} says that ball is at position {1} {2} {3}", this.Name, this.ball.Position.PositionX, this.ball.Position.PositionY, this.ball.Position.PositionZ));
}

}

我有两个类 GamePlayer 和 Referee 都继承了 Player:

 GamePlayer : Player { // implementation }
Referee: Player { // implementation }

我想用例如两个 Decorations 装饰属性 Name :SoccerPlayer 和 BasketBallPlayer。例如属性名称应该返回

John - basketballPlayer
John - soccerPlayer:
John - basketballPlayer - soccerPlayer

最佳答案

装饰器模式最适用于接口(interface)。如果您想将它与抽象基类一起使用,则需要将任何要修饰的方法 virtual 以便派生类可以覆盖它们以在委托(delegate)给修饰的基类型之前进行自己的处理base.MyMethod 方法。

此时您基本上是在使用继承。装饰基类和继承之间的唯一区别是,在装饰器模式中,您的派生类与基类有 Is AHas A 关系,而继承只会有 Is A 关系。它可能与您的派生类外部没有区别,所以不妨直接继承。

https://msdn.microsoft.com/en-us/library/9fkccyh4.aspx

关于c# - 将装饰器模式与抽象类一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42977537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com