方法未被识别

3
我正在处理的代码无法正常工作。当调用hello()时,会显示以下错误:

nameThisString“在当前上下文中不存在”

我已经有了整体的代码结构(它被大大简化以达到重点)。我的代码有什么问题?
using System.Windows.Controls;

namespace Application3
{
    public partial class MainView : UserControl
    {
        public SecondClass secondClass;
        public MainView()
        {
            InitializeComponent();
            hello();    
        }

        private void hello()
        {
            secondClass.nameThisString("hello");
        }        
    }

    public class SecondClass
    {
        public void nameThisString(string what)
        {
            what = "me";
        }    
    }    
}

4
也许你简化得太多了? - Uwe Keim
2
您提供的代码并未显示您所声称的问题。请提供一个最小可复现示例([MCVE])。 - Jon Skeet
我和@UweKeim一样。这个简化版本是否仍然能够重现您的问题?我没有看出任何问题。 - DrewJordan
2
这段代码唯一会产生的结果就是 NullReferenceException 异常 - 因为你还没有实例化 SecondClass - Jamiec
3
那是一个完全不同的错误!它是一个异常,而不是你之前提到的编译时错误。 - Jon Skeet
显示剩余7条评论
3个回答

4

根据您发布的代码,只有一种情况会导致该错误;如果您调用方法的方式如下所示而不是secondClass.nameThisString("hello");

    private void hello()
    {
        nameThisString("hello");
    }  

根据您的评论,您遇到了一个NullRef异常,因为您只是定义了变量但没有为其创建实例。请将您的代码更改为以下形式:

    public SecondClass secondClass;
    public MainView()
    {
        InitializeComponent();
        secondClass = new SecondClass(); // create an instance
        hello();    
    }

谢谢!定义变量和创建实例有什么区别?例如,为什么你只是定义它而不创建它? - Sean
如果你说 int a,那么你只是在定义或声明一个整型变量,但创建实例就是当你为它赋值并说 a = 100。虽然 INT 是值类型... 对于类似 SecondClass secondClass 的引用类型,你只是声明了变量,它现在是空的(或者)不指向堆中的任何对象,因此你将需要使用 new 运算符来创建实例。首先考虑学习更多关于面向对象编程的知识。 - Rahul
感谢您的解释。 - Sean
@Rahul 也许你举的例子不太恰当 - int a 由于其类型确实会赋予它一个值(0)。但类的行为则不同。 - Jamiec
@Jamiec,那有点过于简单了。 - Rahul

3

您需要在MainView类的构造函数中先创建SecondClass的实例。


在你的构造函数中 - secondClass = new SecondClass() - Alex
5
这不会导致所提到的错误——它将是一个空引用。 - PaulB
@PaulB 这其实就是问题所在(正如评论中所揭示的)。 - ChrisF
真的 - 尽管我之前评论过,但那是在揭示之前... :) - PaulB

0

你忘记实例化这个类了;使用方法如下:

 public SecondClass secondClass;
 public MainView()
  {
    InitializeComponent();
    SecondClass = new SecondClass();
    hello();
  }

或者简单说:

public SecondClass secondClass=new SecondClass();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接