2013-01-31 48 views
3

這基本上是我第一次嘗試理解C#中的類。我在互聯網上瀏覽過幾個教程,但是我錯過了最多的東西,而且我還沒有找到任何東西,這是一個很好的例子。C#類 - 基本示例

我有一些想法我基本的程序應該看起來怎麼樣,我會感激你的幫助:

using System; 

namespace Introduction_to_classes 
{ 
    class Person 
    { 
     int Age; 
     string Name; 

     int DateOfBirth() 
     { 
      return 2013 - Age; 
     } 
    } 

    class Program 
    { 
     public static void Main() 
     { 
      Person Mother = new Person(35, Alice); 
      Person Son = new Person(12, Johny); 

      Mother.Name = "Lucy"; // Just changing the value afterwards 

      if(Mother.Age > Son.Age) 
      { 
       int year = Mother.DateOfBirth(); 
       Console.WriteLine("Mom was born in {0}.", year); 
      } 

      Console.ReadLine(); 
     } 
    } 
} 

這只是一個想法,那肯定是行不通的。但是,比什麼都重要,這將有助於我,如果你可以把它糾正對工作示例...

+0

在其目前的形式這個問題是不好的,可能會得到關閉。請專注於您遇到的具體問題。 –

+0

你應該詢問你得到的具體編譯錯誤,但不知道如何解決。 – juharr

+0

公開「Person」的成員;在創建實例時更改圓括號以捲曲和命名成員。你已經完成了。我發佈了答案。 –

回答

6
class Person 
{ 
    public int Age { get; set; } 
    public string Name { get; set; } 

    public Person(int age, string name) 
    { 
     Age = age; 
     Name = name; 
    } 

    public int DateOfBirth() 
    { 
     return 2013 - Age; 
    } 
} 

     class Program 
     { 
      public static void Main() 
      { 
       Person Mother = new Person(35, "Alice"); 
       Person Son = new Person(12, "Johny"); 

       Mother.Name = "Lucy"; // Just changing the value afterwards 

       if (Mother.Age > Son.Age) 
       { 
        int year = Mother.DateOfBirth(); 
        Console.WriteLine("Mom was born in {0}.", year); 
       } 
      } 
     } 

一些有用的鏈接:propertiesconstructor

+0

我會支付這種幫助! :-) 謝謝。 – Jeyekomon

3
using System; 

namespace Introduction_to_classes { 
    class Person { 
     public int Age; 
     public string Name; 

     public int DateOfBirth() { 
      return 2013-Age; 
     } 
    } 

    class Program { 
     public static void Main() { 
      Person Mother=new Person { 
       Age=35, 
       Name="Alice" 
      }; 

      Person Son=new Person { 
       Age=12, 
       Name="Johny" 
      }; 

      Mother.Name="Lucy"; // Just changing the value afterwards 

      if(Mother.Age>Son.Age) { 
       int year=Mother.DateOfBirth(); 
       Console.WriteLine("Mom was born in {0}.", year); 
      } 

      Console.ReadLine(); 
     } 
    } 
} 
+1

我可能是錯的,但我不'認爲'你可以用這種方式初始化字段。我認爲他們必須是財產。但有人請糾正我,如果我誤解了這一點。 –

+0

@BrandonMoore你可以初始化字段,這只是你通常不應該有公共領域。 – juharr

+0

沒有懷疑。我也編譯了代碼。 –

3

的問題是,你指一個構造函數不存在:

Person Mother = new Person(35, Alice); 

這裏的第一個參數是一個int,第二個應該是string據我理解。但是字符串文字應該用雙引號標出,以便該行應該是:

Person Mother = new Person(35, "Alice"); 

對於下面的行也是如此。

現在你可能想要一個構造函數來接受這些參數的類型,並且你想把這些值保存到新的對象中,我假設。所以,在你Person類補充一點:

public Person(int a, string n) 
{ 
    this.Age = a; 
    this.Name = n; 
} 

最後,你應該讓你的AgeName領域進入到其他類,通過標記他們internalpublic

public int Age; 
    public string Name; 

之後,你應該很好去。

+0

除了'DatOfBirth'方法和兩個字段都是私有的。 – juharr

+0

@juharr我不知道C#的默認修飾符是什麼,因爲我總是明確地指定它們,但是我認爲它是'internal',而不是'private'。在這種情況下,'internal'應該沒問題。 –

+1

如果它在課外,它是內部的,內部是私密的。 http://msdn.microsoft.com/en-us/library/ms173121.aspx – juharr

1

首先:new Person(35, "Alice")意味着class Person定義了構造函數public Person(int age, string name)。或者,您必須致電new Person() { Age = 35, Name = "Alice" },只有在您尚未定義構造函數或者定義了一個構造函數時纔會使用0參數,例如public Person()(請注意我是如何將「Alice」放在引號內的?這是因爲您沒有定義一個名爲Alice字符串,所以Alice是一個不明物體)

接下來我們Mother.Name = "Lucy",這是行不通的,因爲Name不被發現。 class Person確實定義了Name,但由於您未指定訪問修飾符,如publicprivate,class Program甚至不知道它存在並因此無法訪問它。所以你必須使用public string Name而不是string Name。它也被認爲是良好的風格總是指定您的訪問修飾符。同樣適用於public int Agepublic int DateOfBirth()

要了解更多關於訪問修飾符是指http://msdn.microsoft.com/en-us/library/ms173121.aspx