到达父类的公共属性

本文关键字:属性 父类 | 更新日期: 2023-09-27 18:19:15

一个简单的问题:
public class class1
{
     public string string1;
     public class class2
     {
         public string string2
         {
             get{ string tmp = class1.string1;  } 
         }
     }
}

我想能联系到class1。String1来自class2.string2。得到,但我不能。你建议我做些什么改变,这样我才能做到?

谢谢

到达父类的公共属性

将class1引用传递给构造函数中的class2:

public class class1 {
  public string string1;
  public class class2 {
    private class1 _Reference;
    public class2(class1 reference) {
      if (reference == null) {
        throw new ArgumentNullException("reference");
      }
      _Reference = reference;
    }
    public string string2 {
      get { return _Reference.string1; }
    }
  }
}

在两个类都创建后将class1引用传递给class2:

public class class1 {
  public string string1;
  public class class2 {
    private class1 _Reference;
    public class1 Reference {
      set { _Reference = value; }
    }
    public string string2 {
      get { return _Reference.string1; }
    }
  }
}
static void usage() {
  var foo = new class1();
  var bar = new class1.class2();
  bar.Reference = foo;
  string value = bar.string2;
}

据我所知,没有办法从嵌套类中访问类。类嵌套不会导致周围类的自动实例化,它只是构建代码的一种方法(通常很臭)。

您要么需要对Class2内部Class1的实际实例的引用,要么需要Class1上的静态方法。

另一种实现此目的的方法是使用继承,但这是完全不同的:
public class Class1 {
    protected String String1 { get; set; }
}
public class Class2 : Class1 {
    public String String2 {
        get {
            String PropertyFromClass1 = base.String1;
            // ...
        }
    }
}

也就是说:你的代码不会编译,string2的getter没有返回任何东西。请熟悉c#的命名约定。

谢谢你的建议。由于代码的特定性质,我必须在另一个名称空间中使用全局公共静态类来解决这种情况。

来自Java的我在开始用c#开发时遇到了这个"问题"。

Dennis Traub清楚地解释了

,在c#中,您不能访问外部类成员或方法。所以你必须实现Java中自动发生的事情:

class OuterClass {
    string s;
    // ...
    class InnerClass {
        OuterClass o_;
        public InnerClass(OuterClass o) { o_ = o; }
        public string GetOuterString() { return o_.s; }
        }
    void SomeFunction() {
        InnerClass i = new InnerClass(this);
        i.GetOuterString();
    }
}