经由嵌套类型不能访问外类型的非静态成员(Cannot access a non-static mem

2019-09-01 15:58发布

我有错误

不能访问外类型的非静态成员“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类,但我需要外界的这种方法。

林种目标规划的新手。

提前致谢。

Answer 1:

的问题是, 嵌套类不是派生的类,所以在外部类中的方法是不能继承

有些选项

  1. 制作方法static

     class Neuro { public class Net { public void SomeMethod() { int x = Neuro.OtherMethod(); } } public static int OtherMethod() { return 123; } } 
  2. 使用继承代替嵌套类:

     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(); } } 
  3. 创建的实例Neuro

     class Neuro { public class Net { public void SomeMethod() { Neuro n = new Neuro(); int x = n.OtherMethod(); } } public int OtherMethod() { return 123; } } 


Answer 2:

您需要实例类型的对象Neuro在你的代码的某个地方,并呼吁OtherMethod就可以了,因为OtherMethod不是一个静态方法。 无论你创建这个对象的内部SomeMethod ,或将其作为参数传递给它是由您决定。 就像是:

// somewhere in the code
var neuroObject = new Neuro();

// inside SomeMethod()
int x = neuroObject.OtherMethod();

另外,您也可以使OtherMethod静态的,这将让你从调用它SomeMethod你目前是。



Answer 3:

尽管类嵌套在另一个类中,它仍然是不明显的内部类的哪个哪个的外部类实例的会谈情况。 我可以创建内部类的一个实例,并把它传递给外部类的另一个实例。 因此,你需要特定的实例调用这个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;  
    }
}


Answer 4:

我觉得在做内部类外部类的一个实例是不是一个好的选择,因为你可以在外部类的构造函数执行业务逻辑。 制作静态方法或属性是更好的选择。 如果你坚持做应该比你的另一个参数添加到外部类构造器是不是执行业务逻辑外部类的一个实例。



文章来源: Cannot access a non-static member of outer type via nested type
标签: c# class