gpt4 book ai didi

c# - 继承静态字段之类的东西

转载 作者:行者123 更新时间:2023-11-30 21:55:17 25 4
gpt4 key购买 nike

这个问题有点理论性,它不是家庭作业或重要项目的一部分......我问这个问题是因为我认为这很容易知道,但我找不到一个合适的答案。

问题描述:

  • 每个从我的抽象类继承的类都应该强制提供一个 Symbol 图像。

  • 符号不应该是运行时可变的

  • 实例不应包含图像 [以节省内存]

  • 在运行时通知开发人员的解决方案 [可能通过使用反射],是 Not Acceptable (这是一个更理论化的问题).

.

abstract class A
{
public static abstract Image Symbol{get;}
}
class B:A
{
//this Field should be forced for every class that inherits from A
public static override Image Symbol{get{return....}}
}

当然,我可以使用 readonly 关键字代替 static

但这意味着 B 类的每个实例都会产生额外的图像,因为 readonly 允许在运行时在构造函数中设置字段...导致内存浪费...也许不是很大的内存浪费,因为或多或少会有引用浪费,但它仍然在浪费东西...[如果我错了请纠正我。]

那么...通过使用继承规则,这一切如何变得简单而美好?

最佳答案

不可能将静态成员抽象/虚化,因为多态是基于实例的实际类型,静态成员不属于特定实例。

我认为这可以满足您的所有要求:

abstract class A
{
public abstract Image Symbol{get;}
}
class B:A
{

private static readonly Image _symbol = ...

public override Image Symbol{get{return _symbol;}}
}
  • 每个派生类都必须实现Symbol,因为它在基类中是抽象的
  • 静态字段是只读的,所以你不能在初始化后改变它
  • 该实例不包含图像实例,它在类的所有实例之间共享
  • (虽然不确定最后一个是什么意思...)

当然,缺点是它要求所有的派生类都遵守这个模式。这不会阻止派生类违反某些要求。

关于c# - 继承静态字段之类的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32386521/

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