我有两个自定义对象,可以说Cat
和Dog
. 我想创建一个observable collection
可以容纳其中任何一个对象的对象,因为它们非常相似。我可以使用基类来做到这一点吗?
如果是这样,你介意提供一个简单的例子吗?
如果我确实使用了基类,这是否意味着如果我想使用公共字段,我应该将它们放入基类中?
编辑:我希望然后将 WPF 数据网格绑定到这些对象的属性。我不知道是否可以将 WPF 中的数据网格绑定到两种不同类型的对象...
我有两个自定义对象,可以说Cat
和Dog
. 我想创建一个observable collection
可以容纳其中任何一个对象的对象,因为它们非常相似。我可以使用基类来做到这一点吗?
如果是这样,你介意提供一个简单的例子吗?
如果我确实使用了基类,这是否意味着如果我想使用公共字段,我应该将它们放入基类中?
编辑:我希望然后将 WPF 数据网格绑定到这些对象的属性。我不知道是否可以将 WPF 中的数据网格绑定到两种不同类型的对象...
是的,在这种情况下,您可以使用基类:
public class Pet
{
public int Id { get; set; }
public string Name { get; set; }
public void Run() { }
}
public class Cat: Pet
{
public string Meow()
{
return "Meow";
}
}
public class Dog :Pet
{
public string Bark()
{
return "Whow";
}
}
但是请注意,当您将两个类的实例放在一个集合中时,您只能访问基类的成员。所以这段代码是有效的:
var collection = new ObservableCollection<Pet> {new Cat(), new Dog()};
foreach (var pet in collection)
{
pet.Run();
}
但是你不能使用 Meow() 和 Bark() 方法,除非你使用显式转换。
将太多成员移动到基类时要小心——在上面的示例中,Meow() 对 Dog 没有意义,而 Bark() 对 Cat 没有意义。如果您需要使用某些特定于派生类的方法,您可以检查类型:
pet.GetType()
然后将对象转换为派生类型:
var cat = (Cat)pet;
cat.Meow();
是的。您可以使用基类说动物。是的,如果他们有共同的字段,如名称、类型等。他们可以进入那里。
class Animal {
public String name;
}
然后扩展它。但您也可以扩展功能。
class Dog extends Animal {
public void bark();
}
现在任何要求动物类型的东西都可以接收狗。
public void addToCollection(Animal animal)
addToCollection(new Dog());
这实际上是 Java 的 Object 的支柱。
是的属性,这是基类的重点。您在基类中表达共性,在派生类中表达特殊性。至于基类是否是可观察集合的最佳位置,这取决于。您需要更深入地了解需求和预期用途。不过这是可行的。
也可以查看ObservableCollection<T>。