2012-06-16 2 views
0

Я пытаюсь создать общий метод, когда мне нужно добавить некоторую строку в общий тип данных и создать экземпляр этой добавленной строки.Создать экземпляр для добавленной строки

Например: У меня есть два класса Object1, Объект2, Object3, Object4, .... Object100 и Object1Address, Object2Address, Object3Address, Object4Address, .... Object100Address

Сейчас у меня есть метод для каждого объекта, как 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 sharp?

+3

Зачем вам нужен общий метод, если вы используете 'Person'? Если вам нужно, чтобы он был общим, какие сходства между разными классами вы собираетесь пройти? – Oded

+0

Что сказал Одед. Вы используете все, что связано с «Лицом» в универсальном методе. Это не путь. –

+0

Если я правильно понимаю, вы хотите иметь два произвольных типа 'T' и' TAddress', а 'T' должен иметь метод, который принимает строку, создает' TAddress'? Просьба уточнить ваш вопрос относительно этого момента. –

ответ

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() метод.

+0

Возможно, вы имели в виду String.Concat? String.Join для коллекций –

+0

Да, извините. - Обновленный ответ. –

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#, чтобы сформулировать хороший вопрос, поскольку, поскольку он стоит, этот вопрос кажется запутанным и непоследовательным.