【发布时间】:2016-06-07 20:01:05
【问题描述】:
我有一个创建动物列表的函数,其中一些是狗,而另一些只是动物。该函数将该列表返回给想要仅提取狗的不同函数,这是可能的,因为 Animal 类有一个 bool isDog。
我的问题是,是否可以从动物(父)类中提取特定于狗的(特定于儿童)数据。动物在引擎盖下还能是狗吗?
我尝试过的事情:
- 使用 isDog 布尔提取狗,然后调用 Dog 构造函数在返回 a 的函数之外创建一个新的 动物名单
- 为狗类提供一个构造函数,该构造函数接受动物,但仍然 没有办法保持尾巴长度
我有这两个接口
public interface IAnimal
{
string eyeColor;
int numLegs;
}
public interface IDog: IAnimal
{
double tailLength;
}
还有这两个实现
public class Animal: IAnimal
{
public string eyeColor{get;set}
public int numLegs {get; set;}
public bool isDog;
public Animal(string eyes, int legs){
this.eyeColor = eyes;
this.numLegs = legs
this.isDog = false;
}
}
public class Dog: Animal, IDog
{
public double tailLength {get;set;}
public Dog(double tail, string eyes)
{
this.tailLength = tail;
this.eyeColor = eyes;
this.numLegs = 4;
this.isDog = true;
}
}
这是两个函数的当前状态
List<Animal> getAnimals()
{
List<Animal> animals;
Animal a1 = new Animal("Blue", 4);
animals.Add(a1);
Animal a2 = new Animal("Green", 2);
animals.Add(a2);
Dog d1 = new Dog(2.3, "Brown");
animals.Add(d1);
Dog d2 = new Dog(3.5, "Black");
animals.Add(d2);
return animals;
}
void foo(){
IEnumerable<IAnimal> sample = getAnimals();
var x = totalTailLength(sample.Where(d => d.isDog));
}
double totalTailLength(IEnumerable<IDog> dogs){
return dogs.Sum(d => d.tailLength);
}
谢谢
【问题讨论】:
-
您可能想看看 C# 中的“is”和“as”关键字,这在测试类型或类型之间的转换时非常有用
-
如所写,您的代码甚至无法编译!
-
另外,您不尊重 .NET 命名法(函数和属性的帕斯卡大小写)...
标签: c# inheritance