描述
我有一个特定的班级Limiter
:
class Limiter
{
public uint Index = 0;
public Limiter GetSublimiter()
{
Limiter sublimiter = new();
return sublimiter;
}
}
正如你所看到的,她可以通过 创造像她一样的人GetSublimiter
。我需要确保通过GetSublimiter
索引创建的每个实例都发送到与“父级”相同的索引。那是:
static void Main(string[] args)
{
Limiter limiter1 = new(); // limiter1.Index: 0
Limiter sublimiter11 = limiter1.GetSublimiter(); // limiter1.Index: 0, sublimiter11.Index: 0
sublimiter11.Index++; // limiter1.Index: 1, sublimiter11.Index: 1
Limiter limiter2 = new(); // limiter2.Index: 0, limiter1.Index: 1, sublimiter11.Index: 1
}
请注意 Indexlimiter1
和是limiter2
不同的,因为它们是通过构造函数创建的,而不是GetSublimiter
.
问题
事实上,有哪些选择呢?
此外
我尝试这样:
class Limiter
{
public ref uint Index = 0;
public Limiter GetSublimiter()
{
Limiter sublimiter = new();
sublimiter.Index = ref this.Index;
return sublimiter;
}
}
已收到:
ref 字段只能在 ref 结构中声明。
为索引创建一个包装类。
此问题的常见解决方案是 Owner 和 Parent 属性。
Parent 指向当前对象嵌套的对象,Owner 指向该层次结构中最顶层的对象。
通过这些属性,您可以访问更高级别对象的属性,例如 Index 属性。
不可能在类型定义中创建这样的机制。
可以这样编码:
好吧,它可以保存一个到父级的链接,然后查看 - 如果有父级,那么我们访问父级的索引,如果没有父级,那么我们访问我们自己的索引。