2016-01-06 143 views
3

我正在處理的這段代碼無法正常工作。你好(被調用)時,它顯示這個錯誤:方法未識別

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

也許你簡化了太多? ([ideone](http://ideone.com/yCCnuv)) –

+2

您提供的代碼不會顯示您聲明的問題。請製作一張[mcve]。 –

+0

我與@UweKeim。這個簡化版本實際上是否仍然重現您的問題?我沒有看到任何問題。 – DrewJordan

回答

3

您必須先在MainView類的構造函數中創建SecondClass的實例。

+0

在你的構造函數中''secondClass = new SecondClass()' – Alex

+5

這不會導致錯誤提及 - 將是一個空引用... – PaulB

+0

@PaulB這實際上是問題(如評論中所示) – ChrisF

0

你忘了實例化這個類;使用這樣的:

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

或者乾脆:

public SecondClass secondClass=new SecondClass(); 
4

每您發佈的代碼,只有一個辦法,你可以得到上述錯誤;如果你調用你的方法類似的下面,而不是secondClass.nameThisString("hello");

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

根據您的評論你得到一個NullRef例外,因爲你剛纔定義的變量,但還沒有爲它創建一個實例。改變你的代碼就像

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

謝謝!定義一個變量和創建一個實例有什麼區別? IE爲什麼你只是定義它,而不是創建它? – Sean

+0

如果你說'int a',你只是定義或聲明瞭一個int變量,但是創建一個實例只不過是當你給它賦值並且說'a = 100'。儘管INT是值類型...對於像'SecondClass secondClass'類的引用類型,您剛剛聲明變量並且它現在(或)沒有指向堆中的任何對象,因此您將不得不創建一個實例通過使用'new'運算符。首先考慮更多地瞭解OOP。 – Rahul

+0

謝謝你的解釋。 – Sean