-5

我有一些这样的代码:

class DataFilter
{
    List<Animal> animals=null;
    public function1(string TypeOfData)
    {
        if(TypeOfData=="cat"){//get cats from database and do something}
        else if(TypeOfData=="dog")
        {//get dogs & do something}
    }
}
class Animal
{}
class Cat:Animal
{}
class Dog:Animal
{}

如果我重用 DataFilter 类:

 class CatFilter:DataFilter
 {
 }

如何重用列表动物属性???

如何重构它以将 function1 拆分为不同的类

4

2 回答 2

2
 List<Animal> animals = new List<Animal>() { new Dog(), new Cat() };
 foreach (var animal in animals)
      animal.DoSomething();

--

class Animal
{ public virtual void DoSomething() { } }

class Cat : Animal
{ public override void DoSomething() { Console.WriteLine("CAT"); } }

class Dog : Animal
{ public override void DoSomething() { Console.WriteLine("DOG"); } }

- 编辑 -

我仍然无法理解你真正想要的是什么。但是看到关键字filter让我想到

var groupedAnimals = animals.GroupBy(a => a.GetType())
                         .Select(g => new { Type = g.Key, Animals = g.ToList() })
                         .ToList();

或者

var cats = animals.OfType<Cat>().ToList();
于 2012-10-18T06:09:04.803 回答
1

您可以在设计中使用概念多态性,例如:

class DataFilter
{
    List<Animal> animals = new List<Animal>() { new Dog(), new Cat() };

    public function1()
    {
        foreach (var animal in animals)
            animal.Do();
    }
}

abstract class Animal
{
    public abstract void Do();
}

class Cat: Animal
{
    public override void Do() {}  
}

class Dog: Animal
{
    public override void Do() {}
}
于 2012-10-18T06:08:42.427 回答