我有错误
无法通过访问外部类型“Project.Neuro”的非静态成员 嵌套类型'Project.Neuro.Net'
使用这样的代码(简化):
class Neuro
{
public class Net
{
public void SomeMethod()
{
int x = OtherMethod(); // error is here
}
}
public int OtherMethod() // its outside Neuro.Net class
{
return 123;
}
}
我可以将有问题的方法移到Neuro.Net类,但我需要在外面使用这个方法。
我是一种客观的编程新手。
提前致谢。
答案 0 :(得分:20)
问题是嵌套类不是派生的类,因此外部类中的方法不是继承的。
有些选项
制作方法static
:
class Neuro
{
public class Net
{
public void SomeMethod()
{
int x = Neuro.OtherMethod();
}
}
public static int OtherMethod()
{
return 123;
}
}
使用继承而不是嵌套类:
public class Neuro // Neuro has to be public in order to have a public class inherit from it.
{
public static int OtherMethod()
{
return 123;
}
}
public class Net : Neuro
{
public void SomeMethod()
{
int x = OtherMethod();
}
}
创建Neuro
的实例:
class Neuro
{
public class Net
{
public void SomeMethod()
{
Neuro n = new Neuro();
int x = n.OtherMethod();
}
}
public int OtherMethod()
{
return 123;
}
}
答案 1 :(得分:2)
您需要在代码中的某处实例化Neuro
类型的对象,并在其上调用OtherMethod
,因为OtherMethod
不是静态方法。是否在SomeMethod
内创建此对象,或将其作为参数传递给它取决于您。类似的东西:
// somewhere in the code
var neuroObject = new Neuro();
// inside SomeMethod()
int x = neuroObject.OtherMethod();
或者,您可以将OtherMethod
设为静态,这样您就可以像现在这样从SomeMethod
拨打电话。
答案 2 :(得分:0)
即使类嵌套在另一个类中,但是外部类的哪个实例与哪个内部类实例进行对话仍然不明显。我可以创建一个内部类的实例,并将其传递给外部类的另一个实例。
因此,您需要特定的实例来调用此OtherMethod()
。
您可以在创建时传递实例:
class Neuro
{
public class Net
{
private Neuro _parent;
public Net(Neuro parent)
{
_parent = parent;
}
public void SomeMethod()
{
_parent.OtherMethod();
}
}
public int OtherMethod()
{
return 123;
}
}
答案 3 :(得分:0)
我认为在内部类中创建外部类的实例不是一个好的选择,因为您可以在外部类构造函数上执行业务逻辑。制作静态方法或属性是更好的选择。如果你坚持创建一个外部类的实例,那么你应该向外部类构造函数添加另一个不执行业务逻辑的参数。