c# 在类嵌套结构中引用非静态类成员

Posted

技术标签:

【中文标题】c# 在类嵌套结构中引用非静态类成员【英文标题】:c# reference to non-static class members in a class nested struct 【发布时间】:2021-10-06 16:26:52 【问题描述】:

我在class C 中有一个struct S 作为嵌套声明,我想在S 的构造函数中引用C 的成员:

public class C 
    private int class_state = 0;
    
    private struct S 
        public int struct_state;
        
        public S () 
            struct_state = class_state;
        
    

    public void foo (int state) 
        class_state = state;
    
    
    public void bar () 
        S s = new S();
    

产生一个错误,即class_state 是非静态的,因此需要引用C 的实例。

有没有一种隐式方法告诉struct S引用它被实例化的实例?

【问题讨论】:

不,结构不知道封闭类的哪个实例正在构造它。 只将this传递给S的构造函数有什么问题? 【参考方案1】:

没有。与 Java 不同,C# Nested Types 没有对封闭类型实例的“隐含”或“自动”引用。

“嵌套类型可以访问其包含类型可访问的所有成员。它可以访问包含类型的私有和受保护成员,包括任何继承的受保护成员。”

但是:

“要访问包含类型,将其作为参数传递给嵌套类型的构造函数。”

【讨论】:

以上是关于c# 在类嵌套结构中引用非静态类成员的主要内容,如果未能解决你的问题,请参考以下文章

c# 静态成员和实例成员的区别

深入理解C# 静态类与非静态类静态成员的区别

在类模板中专门化非静态成员是不可能的吗?为啥?

c# 的类成员

Java 静态成员类 非静态的成员类 局部类 匿名类

C# 静态类和非静态类的区别