2014-02-07 86 views
6

我是C#的新手,我正在學習它,它只是一個虛擬測試程序。我收到了這篇文章標題中提到的錯誤。以下是C#代碼。錯誤:成員名稱不能與其封閉類型相同

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace DriveInfos 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Program prog = new Program(); 
      prog.propertyInt = 5; 
      Console.WriteLine(prog.propertyInt); 
      Console.Read(); 
     } 

     class Program 
     { 
      public int propertyInt 
      { 
       get { return 1; } 
       set { Console.WriteLine(value); } 
      } 
     } 
    } 
} 
+5

錯誤信息的哪一部分不清楚? – hvd

+6

爲什麼你需要'Program'中定義的'Program'?只要改名字! – crashmstr

+0

更改Program使用的程序名稱 – Adrian

回答

7

當你這樣做:

Program prog = new Program(); 

,如果你想在C#編譯器不能告訴使用Program這裏:

namespace DriveInfos 
{ 
    class Program // This one? 
    { 
     static void Main(string[] args) 
     { 

或者,如果你的意思是使用的Program其他定義:

class Program 
    { 
     public int propertyInt 
     { 
      get { return 1; } 
      set { Console.WriteLine(value); } 
     } 
    } 

在這裏做的最好的事情就是改變內部類的名稱,它會給你:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace DriveInfos 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      MyProgramContext prog = new MyProgramContext(); 
      prog.propertyInt = 5; 
      Console.WriteLine(prog.propertyInt); 
      Console.Read(); 
     } 

     class MyProgramContext 
     { 
      public int propertyInt 
      { 
       get { return 1; } 
       set { Console.WriteLine(value); } 
      } 
     } 
    } 
} 

所以現在不會有任何混淆 - 不是編譯器,也不是爲了當你6個月回來並試圖弄清楚它在做什麼!

+2

由於類實際上是Program和Program.Program,所以編譯器應該能夠理解,基本問題是C#規範定義您可以'這樣做。在VB中,你可以像這樣創建一個具有相同名稱的嵌套類。我想象的設計選擇是爲了避免模糊和混亂與構造函數語法 – Chris

+1

@RobLang我加厚它是正確的。謝謝你告訴我SOF的這個功能。我不知道這一點,我也是新來的。 :-) –

2

你有兩個類具有相同名稱的「計劃」重新命名其中的一個

 
namespace DriveInfos 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Program prog = new Program(); 
      prog.propertyInt = 5; 
      Console.WriteLine(prog.propertyInt); 
      Console.Read(); 
     } 

     class Program1 
     { 
      public int propertyInt 
      { 
       get { return 1; } 
       set { Console.WriteLine(value); } 
      } 
     } 
    } 
} 
相關問題