2017-11-21 4 views
-2

私は、この2つのインスタンスの型 "FirstType"と "SecondType"を母クラス "ContaBancaria"から継承しています。彼らは両方とも異なるテキストボックスからテキストを返します。基本的には同じことですが、2つの異なるリストタイプに対して2つのインスタンスが必要です(私の質問とは関係ないと思われますので、詳細には進まないでください)単一のメソッドを使用して異なるインスタンスの型を返す

private FirstType AddTypeFirst() 
    { 
     return new FirstType(textBoxNumber.Text, 
      textBoxBalance.Text, 
      textBoxName.Text, 
      textBoxAddress.Text, 
      textBoxBirth.Text); 
    } 

    private SecondType AddTypeSecond() 
    { 
     return new SecondType(textBoxNumber.Text, 
      textBoxBalance.Text, 
      textBoxName.Text, 
      textBoxAddress.Text, 
      textBoxBirth.Text); 
    } 

同じ2つのインスタンスを同じメソッドタイプで返す方法はありますか?

EDIT: 私は何を意味することは、たとえば、1つの方法でインスタンスのこれらの2つの異なる型を返すことだった:

private [type?] AddInstance() 
{ 
    return new [type*] textBoxNumber.Text, //* the type could be FirstType or SecondType 
      textBoxBalance.Text, 
      textBoxName.Text, 
      textBoxAddress.Text, 
      textBoxBirth.Text); 
} 

はEDIT 2:

ContaBancaria次のようになります。

abstract class ContaBancaria 
{ 
    public string number { get; set; } 
    public string balance { get; set; } 

    public Client data { get; set; } 
} 

そして、クライアントがありますので、...

class Client 
{ 
    public string name; 
    public string address; 
    public string birth; 
} 

あなたは私を得ることを願っています。

public static class Ext { 
    public static void AddInstancia<T>(this List<T> aList) where T : class { 
     if (typeof(T) == typeof(FirstType)) 
      aList.Add(AddTypeFirst() as T); 
     else 
      aList.Add(AddTypeSecond() as T); 
    } 
} 

私は何を参照してください:あなたがあなた自身の一般的な追加機能を書き、種類を把握するためにリフレクションを使用する必要があります、あなたがに追加されたリストに基づいて、適切な型を返すようにしたいと仮定しない

+1

によると、良いアイデアであることを納得していないよ、多分あなたの質問を編集してみては? – maccettura

+0

私はアイデアを持っていませんあなたがやろうとしていること..もし私が推測しなければならないのは、ジェネリッククラスを使用したいということです – MethodMan

+0

私は質問を編集しました。 – ckvywk

答えて

0

var list1 = new List<FirstType>(); 

list1.AddInstance(); 

のように呼び出すことができる

。 たとえば、2つのクラスがあり、そのうちの1つを受け取りたいとします。これらのクラスは "FirstSon"と "SecondSon"という名前で、どちらもクラス "Father"から派生しています。

class Father 
{ 
    string myName; 
    public string MyName 
    { 
     get { return myName; } 
     set { myName = value; } 
    } 
    public Father() 
    { 
     myName = "John"; 
    } 
} 

class FirstSon : Father 
{ 
    string mySecondName; 
    public string MySecondName 
    { 
     get { return mySecondName; } 
     set { mySecondName = value; } 
    } 

    public FirstSon() 
    { 
     mySecondName = "Bill"; 
    } 
} 

class SecondSon : Father 
{ 
    int age; 
    public int Age 
    { 
     get { return age; } 
     set { age = value; } 
    } 
    string mySecondName; 
    public string MySecondName 
    { 
     get { return mySecondName; } 
     set { mySecondName = value; } 
    } 
    public SecondSon() 
    { 
     mySecondName = "Drake"; 
     age = 21; 
    } 
} 

GetObject()メソッドがあります。この方法は一般的です。クラスの型を受け取り、受け取った型をチェックして、同じ型の新しいオブジェクトを返します。

public static T GetObject<T>() where T: Father 
    { 
     var firstSon = new FirstSon(); 
     var secondSon = new SecondSon(); 
     if (firstSon.GetType() == typeof(T)) 
      return (T)Convert.ChangeType(firstSon, typeof(T)); 
     return (T)Convert.ChangeType(secondSon, typeof(T)); 
    } 

それは方法Convert.ChangeType(オブジェクト値、タイプconversonType)を使用して、あなたはあなたのタイプにあなたのオブジェクトを変換することができます。

しかし、私は、これは私は正直にあなたが求めているものは考えているHow do I make the return type of a method generic?

+0

私はこれを使用できました、ありがとうございます。 – ckvywk

-2

リストのタイプを知っているだけです。

Reflectionを使用する代わりに、各サブにいくつかの関数を追加するとdynamicを使用することもできますタイプ:

public class FirstType : Parent { 
    public FirstType MakeChild() { 
     return new FirstType(); 
    } 
} 

public class SecondType : Parent { 
    public SecondType MakeChild() { 
     return new SecondType(); 
    } 
} 

public static class Static<T> where T : new() { 
    public static dynamic Value = new T(); 
} 

public static class Ext { 
    public static void AddInstance<T>(this List<T> aList) where T : new() { 
     aList.Add(Static<T>.Value.MakeChild()); 
    } 
} 
あなたが一般的な方法と私は思うderrivedクラスを使用することができます
+0

downvotes、説明なし...おそらくdownvotesは近い票のようになり、コメントが必要です。 – NetMage

関連する問題