2017-01-11 6 views
0

インターフェイスを作成していて、別のリストタイプを処理できるようにするためには、どうすればよいですか?インターフェイス内の一般的なリスト

私は

interface iGeneric 
{ 
    void Add(object obj); 
    void Delete(object obj); 
    void Update(object obj); 
    object View(object obj); 
} 

そして使用しています。このインタフェースが、そのない権利ジェネリックリストのタイプ、またはタイプを試してみました、私はList<Person>のリストに使用するクラス、List<Charge>List<Other>

を使用していますiGenericインタフェース理想的

public class Charge : iGeneric 
{ 
    public Charge() 
    { 
     Description = "na"; 
    } 

public void Add(object obj) 
    { 
     //Add a new charge to the database 
     List<Charge> myCharge = new List<Charge>(); 
     string cn = ConfigurationHelper.getConnectionString("Scratchpad"); 

     using (SqlConnection con = new SqlConnection(cn)) 
     { 
      con.Open(); 

      try 
      { 
       using (SqlCommand command = new SqlCommand("INSERT INTO tblCharge ([Description],[Amount]) VALUES (@Description, @Amount)", con)) 
       { 
        command.Parameters.Add(new SqlParameter("Description", NewCharge.Description)); 
        command.Parameters.Add(new SqlParameter("Amount", NewCharge.Amount)); 

        command.ExecuteNonQuery(); 
       } 
       MessageBox.Show("New Charge added successfully"); 
      } 
      catch (Exception) 
      { 
       Console.WriteLine("Failed to insert new charge."); 
      } 
     } 

を継承チャージクラスは、私がdefin時に各リストとクラスを設定したいと思いますつまり、リスト

List<Charge> myCharge = new List<Charge>(); 
List<Person> myPerson = new List<Person>(); 
List<Other> myOther = new List<Other>(); 
+3

"それが好きではない" - それはどういう意味ですか?どのようなエラーメッセージですか?どのような観測ですか? 'Charge.Add'は' object'を期待していますが、 'iGeneric.Add'は' T'を期待しています。これはコンパイルできません。そして、あなたの質問には下のコードブロック(さまざまなリストを初期化する場所)は何をするのでしょうか? –

+0

私はそれをインラインにするためにそれを変更しました...リストTを試しましたが、正しい構文/コマンドはありませんでした。一番下のブロックは3つのリストです。インターフェイス経由で使用したいリストです。インターフェイスは、私が渡したリストをすべて取ることができるはずです – Ggalla1779

+1

「それが好きではない」という意味はまだありません。また、私はあなたが何を求めているのか、何を達成しようとしているのかについても分かりません。あなたの質問を明確にしてください。たとえば、最終的には、次のように書いています。「理想的には、リストを定義するときに各リストとクラスを設定したい、しかし、次のコードブロック(リストの初期化)はうまく見えますが、何が問題なのですか? –

答えて

1

私があなたの質問を正しく理解していれば、ジェネリックでこれを行うことができます。

public interface IGenericManager<T> 
{ 
    void Add(T obj); 
    void Delete(T obj); 
    void Update(T obj); 
    T View(T obj); 
} 

public class Person 
{ 
    public string Name { get; set; } 
} 

public class PersonManager : IGenericManager<Person> 
{ 
    public void Add(Person obj) 
    { 
     // TODO: Implement 
    } 

    public void Delete(Person obj) 
    { 
     // TODO: Implement 
    } 

    public void Update(Person obj) 
    { 
     // TODO: Implement 
    } 

    public Person View(Person obj) 
    { 
     // TODO: Implement 
     return null; 
    } 
} 
+0

あなたの明快に感謝のおかげで... – Ggalla1779

関連する問題