C# 泛型与抽象类
我已实施了以下常规:C# 泛型与抽象类,c#,C#,我已实施了以下常规: public class GenericAnimal<T> { public int legs; public void Walk() { Console.WriteLine("Animals Walk...."); } } public class Dog { public void Bark() { Console.WriteLine("Barking....");
public class GenericAnimal<T>
{
public int legs;
public void Walk()
{
Console.WriteLine("Animals Walk....");
}
}
public class Dog
{
public void Bark()
{
Console.WriteLine("Barking....");
}
}
public class Cat
{
public void Mew()
{
Console.WriteLine("Mewing....");
}
}
然后我使用的类如下所示:
GenericAnimal<Dog> dogObj = new GenericAnimal<Dog>();
GenericAnimal<Cat> catObj = new GenericAnimal<Cat>();
在dogObj和catObj中,我都得到了Walk方法。我可以用抽象类来做这件事。那么,与抽象类相比,使用泛型还有什么好处呢?在您的例子中,没有。泛型在希望代码可与不同类型重用的场景中是有意义的。在GenericAnimal中,您没有使用T做任何事情。请尝试编写以下内容:
public class Animal
{
public int legs;
public void Walk()
{
Console.WriteLine("Animals Walk....");
}
}
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine("Barking....");
}
}
public class Cat : Animal
{
public void Mew()
{
Console.WriteLine("Mewing....");
}
}
试着列两张清单:第一张是只猫的清单,第二张是只狗的清单——先不使用清单,然后再尝试使用清单。我认为它将帮助您更好地理解它将代码更改为下一个
public class GenericAnimal<T>
{
public T Instance{get;set;}
public int legs;
public void Walk()
{
Console.WriteLine("Animals Walk....");
}
}
你可以用狗和猫。但是eyossi为这种情况描述了更好的代码。泛型和继承是两个完全不同的概念,具有完全不同的功能。没有这样的比较使用泛型比抽象类有什么额外的优势?。如果您可以从所有子对象中抽象出一些公共功能,那么使用抽象类是有意义的。是关于泛型的更多信息。你的具体例子可以通过没有泛型的正常遗传得到更好的解决-狗和猫的子类动物。但是,假设您现在想要一个动物列表。作为非通用解决方案,您可以选择一个ArrayList,您可以向其中添加cat和dog实例。但是,ArrayList的Add方法将对象作为参数。因此,您还可以将鱼添加到列表中,鱼不能行走。当你处理这个列表告诉所有的动物行走时,你首先要检查它们是否是动物
这就是泛型的帮助。您可以使用列表定义列表,然后只能将符合is Animal的对象添加到列表中。假设鱼不是动物,那么如果你尝试添加一个,你会得到一个编译器错误。此外,当你得到列表中的项目时,你会得到动物实例,而不仅仅是对象,因此你可以告诉它们立即行走。在你的示例中,通用是不可用的。7个问题,没有被接受的答案-如果你能为你以前的帖子标记一个a问题作为答案?你的狗会吠叫吗?你的catObj喵叫吗?你不认为谷歌搜索泛型会给你一个更好的解释吗