我知道这可以通过使用接口(interface)为方法完成。但是接口(interface)不能有字段或静态属性(这无济于事,因为它会为实现该接口(interface)的所有类指定一个值)。我还可以为抽象类的属性设置默认值。但理想情况下,我想强制每个继承类实现这些属性的值。这些值仍然可以在抽象类级别的抽象方法中使用。
每个属性的好处:
- 抽象的;基类要求实现此属性,但未指定值。
- 静止的;每种实现类型只存储一个值,而不是每个对象。
public interface IPiece
{
readonly int Points;
readonly char Letter;
}
public abstract class Piece
{
public static readonly int Points;
public static readonly char Letter;
}
public class King : Piece, IPiece
{
public int Points = 0;
public int Letter = 'K';
}
最佳答案
解决这个问题的标准模式是:
public interface IPiece
{
int Points { get; }
char Letter { get; }
}
public class King : IPiece
{
public int Points => 0;
public char Letter => 'K';
}
根本不需要使用 static
,因为 0
和 K
是文字,因此(像 static
) 每个类只有效存储一次。
另请注意,我已经删除了您的抽象类
- 它没有用处,因为其中没有逻辑。没有逻辑的抽象类
在概念上等同于接口(interface)
(您已经拥有),因此在这个阶段没有必要。
如果你真的想使用static
那么你可以使用:
public class King : IPiece
{
private static int points = 0;
private static char letter = 'K';
public int Points => points;
public char Letter => letter;
}
但这并没有什么大的好处。
关于c# - 如何制作抽象静态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53640237/