2009-08-10 73 views
0

我是C#和visual studio 2005的新手 我在VS2005中創建了一個新的控制檯應用程序項目,並將一個Class1.cs文件添加到默認創建的現有Program.cs文件中。C#初學者。編譯器錯誤

Class文件有以下簡單的代碼:

public class Class1 
{ 

    public Class1() 
    { 
    } 

    ~Class1() 
    { 
    } 

    public void PrintMessage() 
    { 
     Console.WriteLine("\nHello\n"); 
     Console.Read(); 
    } 
} 

而且Program.cs的文件有以下幾點:

class Program 
{ 
    static void Main(string[] args) 
    { 
     PrintMessage(); 
    } 
} 

當我嘗試編譯我收到以下錯誤:

The name 'PrintMessage' does not exist in the current context.

任何幫助?

感謝,Viren

+6

BTW;注意C#析構函數。他們真的不應該在99%的時間:)在你考慮這樣的事情之前,你需要閱讀Finalize()和Dispose() – cwap 2009-08-10 17:53:35

+2

雖然這個網站是用於編程的問題,但我認爲也許你應該閱讀關於面向對象開發的教程或書籍。 – 2009-08-10 17:54:24

+0

順便說一句,在C#中99%你需要直接聲明finalizer〜Class1() - 它必須用在非常特殊的情況下 – abatishchev 2009-08-10 17:54:39

回答

0

您需要對方法所在類的引用。您必須這樣做:

Class1.PrintMessages(); 

因爲Class1不是靜態的,所以您還需要該類的實例。你可以這樣做:

Class1 c = new Class1(); 

最後,你必須調用帶有實例變量前綴的方法。您的代碼將是這個樣子:

Class1 c = new Class1(); 
c.PrintMessages(); 

如果你願意,你可以縮短這個代碼與做和以前一樣的句子

new Class1().PrintMessages(); 

1
class Program 
{ 
    static void Main(string[] args) 
    { 
     new Class1().PrintMessage(); 
    } 
} 

或使PrintMessage()static,所以你可以用它下一個方法:

public class Class1 
{ 
    public static void PrintMessage() 
    { 
     // .. 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Class1.PrintMessage(); 
    } 
} 
13

嘗試:

Class1 myClass = new Class1(); 
myClass.PrintMessage(); 

或者,有什麼可能會更好因爲這看起來像一個效用函數。將您的方法定義更改爲:

public static void PrintMessage() 

因此,您可以直接調用它。

Class1.PrintMessage(); 
-1

您需要引用打印消息的類。 。 。也就是說:Class1.PrintMessage()

+0

我沒有downvote,但是如果不先靜態化就不行。 – Thorarin 2009-08-10 18:12:10

+0

你是對的。這就是我現在被困在VB.NET世界中所得到的結果。 。 。 – andrewWinn 2009-08-10 19:43:30

2

PrintMessage不是類「Program」的方法,它是Class1的一種方法。嘗試

Class1 c = new Class1(); 
c.PrintMessage(); 

你可能也想通過一個教程或兩個:)

3

「PrintMessage」這個名字不會在當前上下文中。

它存在於另一個上下文中 - 類Class1的上下文。由於它是公共類的公共函數,因此可以通過創建Class1的實例來使用它(PrintMessage函數不是靜態的,因此您需要一個Class1的實例來調用它),然後調用PrintMessage函數它。

class Program 
{ 
    static void Main(string[] args) 
    { 
     Class1 someClass1Object = new Class1(); 
     someClass1Object.PrintMessage(); 
    } 
} 
+0

該死的,* 4 *人更快:) – 2009-08-10 17:54:47

+0

當我看到4個新答案時,我正在輸入答案;) – 2009-08-10 17:57:58

+0

我沒有看到它們彈出,我的電腦崩潰了,我正在使用一個拒絕從IE6升級的朋友:D – 2009-08-10 17:59:04

0

調用PrintMessage()Main功能(這是對Program類的函數)的內部也就是說,編譯器會尋找一個程序中的類名爲PrintMessage()某處功能。

你在Class1類上稱爲實例函數。爲了調用這種類型的函數,您需要在函數中使用Class1的實例。事情是這樣的:

static void Main(string[] args) 
{ 
    Class1 myClass = new Class1(); 

    myClass.PrintMessage(); 
} 
0

製作方法static可能是你想要什麼,而不是其他建議在這裏:

public static void PrintMessage() 
{ 
    Console.WriteLine("\nHello\n"); 
    Console.Read(); 
} 

static告訴,這種方法不依賴於一個實例的編譯器一類。如果這對您沒有任何意義,請閱讀您最喜歡的C#書籍中的課程主題。

0

您的PrintMessage()方法是Class1類的方法。您必須引用該類才能使用該方法。

class Program 
{ 
    static void Main(string[] args) 
    { 
     Class1 c = new Class1(); //Create an instance of your class 
     c.PrintMessage(); //Call the PrintMessage method of class Class1 
    } 
} 

注:您可能要到Class重命名爲更具描述性的。

0

您需要引用Class1類才能調用該類的方法。嘗試:

Class1 myClass = new Class1(); 
myClass.PrintMessage(); 
0

打印消息不是主要的部分: u必須告訴它,它是:

Class1 messageClass = new Class1(); 
messageClass.PrintMessage();