2011-07-14 4 views
1

のコーディングスタイルについては、私はインスタンスを作成する別の方法を見たコードサンプルを見ています。ここOOPS&C#

ので、コード

public interface IEmployee 
{ 
    System.Int32? EmployeeID { get; set; } 
    System.String FirstName { get; set; } 
    System.String LastName { get; set; } 
    System.DateTime DateOfBirth { get; set; } 
    System.Int32? DepartmentID { get; set; } 
    System.String FullName(); 
    System.Single Salary(); 
} 

public class Employee : IEmployee 
{ 
    #region Properties 

    public System.Int32? EmployeeID { get; set; } 
    public System.String FirstName { get; set; } 
    public System.String LastName { get; set; } 
    public System.DateTime DateOfBirth { get; set; } 
    public System.Int32? DepartmentID { get; set; } 

    #endregion 

    public Employee(
     System.Int32? employeeid 
     , System.String firstname 
     , System.String lastname 
     , System.DateTime bDay 
     , System.Int32? departmentID 
    ) 
    { 
     this.EmployeeID = employeeid; 
     this.FirstName = firstname; 
     this.LastName = lastname; 
     this.DateOfBirth = bDay; 
     this.DepartmentID = departmentID; 
    } 

    public Employee() { } 

    public System.String FullName() 
    { 
     System.String s = FirstName + " " + LastName; 
     return s; 
    } 

    public System.Single Salary() 
    { 
     System.Single i = 10000.12f; 
     return i; 
    } 
} 

    private List<IEmployee> myList = new List<IEmployee> { new Employee(1, "John", "Smith", new DateTime(1990, 4, 1), 1), 
      new Employee(2, "Gustavo", "Achong", new DateTime(1980, 8, 1), 1), 
      new Employee(3, "Maxwell", "Becker", new DateTime(1966, 12, 24), 2), 
      new Employee(4, "Catherine", "Johnston", new DateTime(1977, 4, 12), 2), 
      new Employee(5, "Payton", "Castellucio", new DateTime(1959, 4, 21), 3), 
      new Employee(6, "Pamela", "Lee", new DateTime(1978, 9, 16), 4) }; 

ので、私はちょうどコードがIEmployeeなぜ従業員で、リストのインスタンスを作成する必要がある理由を知りたいです。

ここで我々は、彼らがなぜ1がIEmployeeを使用する必要があります....それはまた働く

private List<Employee> myList = new List<Employee> { new Employee(1, "John", "Smith", new DateTime(1990, 4, 1), 1), 
     new Employee(2, "Gustavo", "Achong", new DateTime(1980, 8, 1), 1), 
     new Employee(3, "Maxwell", "Becker", new DateTime(1966, 12, 24), 2), 
     new Employee(4, "Catherine", "Johnston", new DateTime(1977, 4, 12), 2), 
     new Employee(5, "Payton", "Castellucio", new DateTime(1959, 4, 21), 3), 
     new Employee(6, "Pamela", "Lee", new DateTime(1978, 9, 16), 4) }; 

のようにコーディングすることができます。 なぜコーダーはEmployeeの代わりにIEmployeeを使用しているので、いくつかの特定の目的が必要です。だから私はIEmployeeを使用する目的を知る必要があります。 私は良い説明を探しています。私を案内してください。ありがとう。

+1

私はIList を使っています。 ;) – tafa

+0

私はそう言います - それはカーゴ・カルト・プログラミングか、プログラマーが直面していた奇抜な技術的問題です。相続の不当な恐怖もあるかもしれません。 –

答えて

1

あなたはコードが必要だと言っています。私はあなたにいくつかを表示します(答えのために少し異なります)。

あなたは

public interface IPlanet { 
    string Name {get;} 
} 

を持っているし、そのインターフェイスを何度も専門とします

public class Mars : IPlanet { public string Name { get { return "Mars"; } } } 
public class Venus : IPlanet { public string Name { get { return "Venus"; } } } 
public class Jupiter : IPlanet { public string Name { get { return "Jupiter";} } } 
public class Earth : IPlanet { public string Name { get { return "Earth"; } } } 

次に、あなたが行うことができます:

List<IPlanet> solarsystem = new List<IPlanet> { 
    new Mars(), 
    new Venus(), 
    new Jupiter(), 
    new Earth(), 
}; 

そして、彼らは同じインターフェイスを共有しているため、あなたはできる:

foreach (var planet in solarsystem) { 
    Console.WriteWrite (planet.Name); 
} 

ある意味では、インターフェイスは異種オブジェクトを同種の方法で管理するのに役立ちます。これは汎用性の高い再利用可能なプログラミングの1つ(多くの種類のもの)でもあります(ウィキペディアのサイトを見ないでください。ジェネリックプログラミングはテンプレートやジェネリックと同じです)。あなたも、より一般化することができますのでListは、IList -interfaceを実装することを

注:あなたがすべきかどうかについては

IList<IPlanet> solarsystem = new List<IPlanet> { 
    new Mars(), 
    new Venus(), 
    new Jupiter(), 
    new Earth(), 
}; 

は、List<T> or IList<T>を参照してください。

8

List<IEmployee>を使用すると、IEmployeeという複数の実装を使用したい場合でもコードを柔軟にすることができます。たとえば、Employee : IEmployeeManager : IEmployeeがあり、List<IEmployee>を使用すると、リストに両方が含まれるようにすることができます

+0

ありがとうが、誰かが小さなサンプルコードで説明してくれればうれしいです。 – Mou

関連する問題