Kin*_*nus 2 c# generics inheritance
我有一个模型,即我有一个抽象类(让调用它Vehicle)和几个继承类,如Bike,Motorbike,Car,Van等这基本上是一个真实的世界问题的简化版本.
abstract class Vehicle
int ID;
int WheelCount;
string OwnerName;
class Bike
DateTime lastSafetyCheck;
class Motorbike
int EngineCC
class Car
double EngineSize
class Van
double StorageCapacity
Run Code Online (Sandbox Code Playgroud)
我在我的系统IEnumerable<Vehicle>中包含了其中的每一个.它包含在线程安全的单例类中,基本上充当内存数据库.
我希望在我的应用程序中有一个方法(在单例或单独的类中),它允许我只查询某种类型的Vehicle.
最初我考虑过这样的方法:
internal IEnumerable<T> GetVehicles<T>() where T : Vehicle
Run Code Online (Sandbox Code Playgroud)
为了我能够提供一个类型T,它将指定我想要检索的类型.我知道我可以使用typeof()来执行逻辑.但我无法弄清楚的是如何回报我的价值观?我基本上都在努力解决方法的内容,我开始认为必须有一个设计模式,这将更有意义.
AK
LINQ已经有了这个方法 - OfType:
var vans = Vehicales.OfType<Van>();
Run Code Online (Sandbox Code Playgroud)
另外,要确定实例是否是您不需要使用的类型的实例typeof(),您可以使用is和as运算符(并且它们也可以与泛型类型一起使用):
if (vehicle is Van) ...
if (vehicle is T) ...
Run Code Online (Sandbox Code Playgroud)
要么
var van = vehicle as Van;
if (van != null) ...
var instance = vehicle as T; // Will need T : class generic type constraint
if (instance != null) ...
var instance = vehicle as T?; // Will need T : struct generic type constraint
if (instance != null) ...
Run Code Online (Sandbox Code Playgroud)