为什么我不能在C#中访问基类中的方法?

为什么我不能在C#中访问基类中的方法?,c#,visual-studio,object,C#,Visual Studio,Object,我试图让我的类号输出另一个类的变量结果。然而,一旦运行它就会显示。错误CS0103:名称“result”在当前上下文中不存在。有人能告诉我怎么解决这个问题吗?如何正确调用getMax方法 using System; namespace Bank { class FindMax { public int setMax(int numOne, int numTwo) { int result; if

我试图让我的类号输出另一个类的变量结果。然而,一旦运行它就会显示。错误CS0103:名称“result”在当前上下文中不存在。有人能告诉我怎么解决这个问题吗?如何正确调用getMax方法

using System;

namespace Bank
{

    class FindMax
    {
        public int setMax(int numOne, int numTwo)
        {
            int result;

            if (numOne >= numTwo)
                result = numOne;
            else
                result = numTwo;

            return result;
        }


    }

    class Number : FindMax
    {
        public void getMax()
        {
            Console.WriteLine(result);
        }
    }

    class MainClass
    {
        public static void Main(string[] args)
        {
            FindMax mx = new FindMax();
            Number n = new Number();
            mx.setMax(20, 12);
            n.getMax();
        }
    }
}

因为getMax中的变量未定义。 你可以这样做

class Number : FindMax
    {
        public void getMax(int result)
        {
            Console.WriteLine(result);
        }
    }
然后打电话

var max = mx.setMax(20, 12);
n.getMax(max);

因为getMax中的变量未定义。 你可以这样做

class Number : FindMax
    {
        public void getMax(int result)
        {
            Console.WriteLine(result);
        }
    }
然后打电话

var max = mx.setMax(20, 12);
n.getMax(max);

您将
result
定义为
setMax()
中的局部变量,因此
getMax()
无法访问它。因此,您应该修复代码:

class FindMax
{
    protected int Result; // Not private, because Number (inherits from FindMax) should access it.

    public int setMax(int numOne, int numTwo)
    {
        if (numOne >= numTwo)
            Result = numOne;
        else
            Result = numTwo;

        return Result;
    }
}

class Number : FindMax
{
    public void getMax()
    {
        Console.WriteLine(Result);
    }
}

您将
result
定义为
setMax()
中的局部变量,因此
getMax()
无法访问它。因此,您应该修复代码:

class FindMax
{
    protected int Result; // Not private, because Number (inherits from FindMax) should access it.

    public int setMax(int numOne, int numTwo)
    {
        if (numOne >= numTwo)
            Result = numOne;
        else
            Result = numTwo;

        return Result;
    }
}

class Number : FindMax
{
    public void getMax()
    {
        Console.WriteLine(Result);
    }
}

结果是一个局部变量,您不能从Number类访问它。应将其设置为基类的属性:

using System;

namespace Bank
{

    class FindMax
    {
        protected int max;

        public void setMax(int numOne, int numTwo)
        {
            if (numOne >= numTwo)
                max = numOne;
            else
                max = numTwo;
        }


    }

    class Number : FindMax
    {
        public void getMax()
        {
            Console.WriteLine(max);
        }
    }

    class MainClass
    {
        public static void Main(string[] args)
        {
            Number n = new Number();
            n.setMax(20, 12);
            n.getMax();
        }
    }
}

结果是一个局部变量,您不能从Number类访问它。应将其设置为基类的属性:

using System;

namespace Bank
{

    class FindMax
    {
        protected int max;

        public void setMax(int numOne, int numTwo)
        {
            if (numOne >= numTwo)
                max = numOne;
            else
                max = numTwo;
        }


    }

    class Number : FindMax
    {
        public void getMax()
        {
            Console.WriteLine(max);
        }
    }

    class MainClass
    {
        public static void Main(string[] args)
        {
            Number n = new Number();
            n.setMax(20, 12);
            n.getMax();
        }
    }
}


result
不是类成员,它是在
setMax
方法中定义的局部变量。您不能在此方法之外访问它(或者说,它不存在),即使在同一个类中也是如此。我认为通过继承FindMax类,您可以继承该类的所有函数、方法、变量和成员??是否正确?是,除了
专用的
外。但这不是问题所在。即使在
FindMax
类中的不同方法中,也无法访问
result
的值,因为它是一个方法局部变量。它在方法执行之外不存在。很明显,您是想将其定义为类成员变量。@初学者\u 29是的,但它不继承方法的定义,不能更改它。无法访问不在此方法内的方法的局部变量。它应该是一个类成员,或者是一个返回值,或者是一个
ref
或者
out
参数,这样您就可以更改它了。我明白了。。。。我在classFindMax{}和方法之间放置了一个公共int结果。我试着运行这个程序,但现在它显示的是0而不是正确的值。您是说setMax方法的返回值只存在于该方法中,而不存在于其他类中???
result
不是类成员,它是在
setMax
方法中定义的局部变量。您不能在此方法之外访问它(或者说,它不存在),即使在同一个类中也是如此。我认为通过继承FindMax类,您可以继承该类的所有函数、方法、变量和成员??是否正确?是,除了
专用的
外。但这不是问题所在。即使在
FindMax
类中的不同方法中,也无法访问
result
的值,因为它是一个方法局部变量。它在方法执行之外不存在。很明显,您是想将其定义为类成员变量。@初学者\u 29是的,但它不继承方法的定义,不能更改它。无法访问不在此方法内的方法的局部变量。它应该是一个类成员,或者是一个返回值,或者是一个
ref
或者
out
参数,这样您就可以更改它了。我明白了。。。。我在classFindMax{}和方法之间放置了一个公共int结果。我试着运行这个程序,但现在它显示的是0而不是正确的值。您是说setMax方法的返回值只存在于该方法中,而不存在于其他类中吗?我认为通过继承FindMax类,您可以继承该类的所有函数、方法、变量和成员??正确和否?我认为通过继承FindMax类,您可以继承该类的所有函数、方法、变量和成员??正确与否?你能从其他类的方法中得到返回值吗?是的,但是你必须使用一个字段来存储结果,就像在另一个答案中一样,在这种情况下你不需要这样做。在您发布的代码中,变量result的作用域是函数而不是类,因此您无法从其他方法访问它。要从另一个方法访问变量,您需要通过将其设置为字段来提升其作用域。您可以从多个类继承吗?例如:className:classwanttouse:classalsowantouse???在C中,您不能从ClassA:ClassB,ClassC这样的多个类继承,但您可以执行ClassB继承ClassC(ClassB:ClassC{})然后做ClassA:classb你能从其他类的方法中得到返回值吗?是的,但是你必须使用一个字段来存储结果,就像在另一个答案中一样,在这种情况下你不需要这样做。在您发布的代码中,变量result的作用域是函数而不是类,因此您无法从其他方法访问它。要从另一个方法访问变量,您需要通过将其设置为字段来提升其作用域。您可以从多个类继承吗?例如:className:classwanttouse:classalsowantouse???在C中,您不能从ClassA:ClassB,ClassC这样的多个类继承,但您可以执行ClassB继承ClassC(ClassB:ClassC{})然后做ClassA:ClassBNo!您应该使用
n.setMax()
,不要创建
FindMax
的实例。更改
mx
的变量
max
(其类型为
FindMax
),不会更改
n
的此变量,因为此变量不是静态的!不您应该使用
n.setMax()
,不要创建
FindMax
的实例。更改
mx
的变量
max
(其类型为
FindMax
),不会更改
n
的此变量,因为此变量不是静态的!