我有一个类,其中多个对象的方法相同(所有对象基本上都是不同的类 - 但它们都来自同一个类):
public abstract class MyBaseClass
{
public abstract void New();
}
public class MyRealClass
{
public MyBaseClass Object1;
public MyBaseClass Object2;
public MyBaseClass Object3;
public void MyMethod()
{
Object1.New();
Object2.New();
Object3.New();
}
}
我想知道是否有更干净的方式,因为它看起来像一个代码味道,我称之为三次相同的方法。 Object1 - Object3的集合是有意义的。另一方面,我需要那些对象来自集合,因为我的视图(WPF)必须直接访问它们。
答案 0 :(得分:1)
您可以获取MyRealClass
的属性列表,这些属性是MyBaseClass
的驱动类并进行强制转换,然后运行方法(New
)。
答案 1 :(得分:0)
由于您正在使用对象,因此所有变量都将保存对真实对象的引用。因此,您可以在列表中包含所有三个对象,并且每个对象都有一个变量。例如,如果更新对象1的变量,并且稍后遍历列表,则会看到对象已更新。
class Program
{
class Person
{
public int ID { get; set; }
public string Name { get; set; }
public Person(int id, string name)
{
this.ID = id;
this.Name = name;
}
}
static void Main(string[] args)
{
Person person1 = new Person(1, "name1");
Person person2 = new Person(2, "name2");
List<Person> items = new List<Person>();
items.Add(person1);
items.Add(person2);
Console.WriteLine(string.Format("Person 1...{0}, {1}", person1.ID, person1.Name));
Console.WriteLine(string.Format("Person 2...{0}, {1}", person2.ID, person2.Name));
foreach (Person p in items)
Console.WriteLine(string.Format("Person from list...{0}, {1}", p.ID, p.Name));
person1.Name = "name1 after";
person2.Name = "name2 after";
Console.WriteLine(string.Format("Person 1 after...{0}, {1}", person1.ID, person1.Name));
Console.WriteLine(string.Format("Person 2 after...{0}, {1}", person2.ID, person2.Name));
foreach (Person p in items)
Console.WriteLine(string.Format("Person from list after...{0}, {1}", p.ID, p.Name));
Console.ReadKey();
}
}
答案 2 :(得分:0)
foreach(MyBaseClass c in new MyBaseClass[] { Object1, Object2, Object3 })
{
c.New();
}
如果您知道最终会拥有n
个对象,则只需将对象存储在数组中。这样,您甚至可以避免每次运行循环时都创建新的数组
MyBaseClass[] MyObjects = new MyRealClass[3];
for(Int32 i = 0; i < MyObjects.Length; i++)
[
MyObjects[i] = new MyRealClass();
}
// ... snip
foreach(MyBaseClass c in MyObjects)
{
c.New();
}