0

汎用データ型に文字列を追加し、その追加された文字列のインスタンスを作成する必要がある汎用メソッドを作成しようとしています。

例: Object1、Object2、Object3、Object4、....Object100 と Object1Address、Object2Address、Object3Address、Object4Address、....Object100Address の 2 つのクラスがあります。

現在、MethodObject1()、MethodObject2()、MethodObject3()、MethodObject4() などの各オブジェクトのメソッドがあります。

MethodObject1()
{
     Object1 object = new Object1();
     Object1Address objectAddress = new Object1Address();

     TestMethod();
}

MethodObject2()
{
     Object2 object = new Object2();
     Object2Address objectAddress = new Object2Address();

     TestMethod();
}

MethodObject3()
{
     Object3 object = new Object3();
     Object3Address objectAddress = new Object3Address();

     TestMethod();
}

MethodObject4()
{
     Object4 object = new Object4();
     Object4Address objectAddress = new Object4Address();

     TestMethod();
}
.
.
.
MethodObject100()
{
     Object100 object = new Object100();
     Object100Address objectAddress = new Object100Address();

     TestMethod();
}

しかし、オブジェクトが 100 個ほどあるので、同様の方法で 100 個のメソッドを作成する必要があります。そこで、ジェネリックメソッドを作成することを考えました。

There is a method which returns only the an array of Object name from an XML file.
Eg: ObjectName[] objectName = GetObjects(); // Returns an array of Object Names from XML file so that 

objectName[0] = Object1;
objectName[1] = Object2;
objectName[2] = Object3;
objectNmae[3] = Object4;
.
.
.
objectName[99] = Object100;

I am looping through objectName array
foreach(var objectItem in objectName)
{
    MethodName<objectItem>();
}

In my generic method I can create an instance of object, like
MethodName<T>()
{
   T t = new T();
   Some how I have to get the name of T and append Address to T 
   So that I can create TAddress instance like
   TAddress tAddress = new TAddress();

}

Cシャープを使用してこれを行う方法はありますか?

4

2 に答える 2

0

あなたのケースでは、ジェネリック メソッドは実際には必要ありません。

おそらくあなたが望むのはToString、クラスのメソッドをオーバーライドすることです。

class PersonAddress()
{
    public override string ToString()
    {
        return string.Concat(this.Street, ", ",  this.City, ", ", this.Postcode);
    }
}

class Person()
{
    public override string ToString()
    {
        return string.Concat(this.Name, ", ",  this.PersonAddress.ToString());
    }
}

Personクラスがメソッドを再利用する方法に注意してくださいPersonAddress.ToString()

于 2012-06-16T18:33:35.723 に答える
0

編集しても、あなたが求めていることにはまだ従うことができません。ただし、前進するために、少なくとも必要なものを特定するのに役立つ可能性のある回答を提供します.

public class ThingWithAddress<T>
{
    public T Item { get; private set; }
    public string Address { get; private set; }

    public static ThingWithAddress<T> Create(T item, string address)
    {
        return new ThingWithAddress<T>
        {
            Item = item,
            Address = address,
        };
    }
}

次に、次のような人物と住所の両方を持つオブジェクトを取得できます。

Person person = ...;
var personWithAddress = ThingWithAddress.Create(person, "some address");

これを誤解しないでください。ただし、このままでは、質問がわかりにくく一貫性がないように見えるため、適切な質問を作成するには十分な C# を学習する必要があるかもしれません。

于 2012-06-16T19:05:34.163 に答える