使用基类将对象添加到集合中

key*_*oss 0 c#

我有两个自定义对象,让我们说Cat和Dog.我想创建一个observable collection可以容纳这些对象的对象,因为它们非常相似.我可以使用基类来做到这一点吗?

如果是这样,你介意提供一个简单的例子.

如果我使用基类,这是否意味着如果我想使用公共字段,我应该将它们放入基类?

编辑:我希望然后将WPF数据网格绑定到这些对象的属性.我不知道是否可以将WPF中的数据网格绑定到两种不同类型的对象......

wla*_*baj 5

是的,在这种情况下,您可以使用基类:

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";
    }
}
Run Code Online (Sandbox Code Playgroud)

但是请注意,当您将在一个集合两种类的实例,您可以访问只在成员基类.所以这段代码是有效的:

var collection = new ObservableCollection<Pet> {new Cat(), new Dog()};

foreach (var pet in collection)
{
   pet.Run();
}
Run Code Online (Sandbox Code Playgroud)

但除非使用显式转换,否则不能使用方法Meow()和Bark().

将太多成员移动到基类时要小心 - 在上面的示例中,Meow()对Cat的Dog和Bark()没有意义.如果需要使用特定于派生类的某些方法,可以使用以下方法检查类型:

pet.GetType() 
Run Code Online (Sandbox Code Playgroud)

然后将对象强制转换为派生类型:

var cat = (Cat)pet;
cat.Meow();
Run Code Online (Sandbox Code Playgroud)