一个简单的问题:
public class class1
{
public string string1;
public class class2
{
public string string2
{
get{ string tmp = class1.string1; }
}
}
}
我希望能够从类2.string2.get到达类1.string 1,但我不能。你会建议我改变什么,以便我能做到这一点?
感谢名单
答案 0 :(得分:1)
在构造函数中将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;
}
答案 1 :(得分:1)
我无法从嵌套类中访问类。类嵌套不会导致周围类的自动实例化,它只是构建代码的一种(通常是相当臭的)方法。
您需要在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#'s naming conventions。
答案 2 :(得分:0)
Thanx的建议。由于代码的特定性质,我不得不在另一个命名空间中使用全局公共静态类来解决这种情况。
答案 3 :(得分:0)
来自Java,当我开始用C#开发时,我遇到了这个“问题”。
正如 Dennis Traub 清楚解释的那样,在C#的this文章中,您无法访问外部类成员或方法。所以你必须实现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();
}
}