我创建了一个抽象类,叫做
因此,我的问题是我想使用类型从管理器获取对象集合,但强制子类实现 " getFooBars()" 方法。
我面临的问题如下:
1. .Net不允许定义静态抽象方法,因此我无法创建 "public static abstract IEnumerable < FooBarizable > GetFooBars()" 并强制子类实现它。
2. 实现的方式不强制子类实现该方法,但我尝试至少抛出一个 "NotImplementedException"。问题在于当我在管理器中调用 "MethodInfo method = type.GetMethod("GetFooBars");" 时,如果子类没有实现该方法,则 "method" 为null,并且调用 "NullPointerException"。
3. 我已经尝试创建一个实例方法而不是静态方法,它解决了实施问题,因为子类必须实现它,但对我来说似乎创建一个不必要的实例来调用一个方法不正确。
那么,有什么方法可以强制子类实现 "getFooBars()" 方法吗? 如果没有,则如何抛出 "NotImplementedException" 而不是 "NullPointerException"?
FooBarizable
,它是Foo
和Bar
这两个类(在实践中可能更多)的父类。现在,我有一个FooBarizableManager
来管理Foo
和Bar
类,具体取决于它的类型。从这个FroobarizableManager
中,我想调用getFooBarizables()
方法。让我们来看看它的结构:
FooBarizable.cs:
public abstract class FooBarizable{
public string Name { get; set; }
public static IEnumerable<FooBarizable> GetFooBars(){
throw new NotImplementedException();
}
}
Foo.cs:
public class Foo : FooBarizable{
public static IEnumerable<FooBarizable> GetFooBars(){
return API.getFoos();
}
}
Bar.cs:
public class Bar : FooBarizable{
public static IEnumerable<FooBarizable> GetFooBars(){
return API.getBars();
}
}
FooBarizableManager.cs:
public class FooBarizableManager {
private Type type;
public FooBarizableManager(Type _t){
this.type = _t;
}
public void showFooBarizables(){
MethodInfo method = type.GetMethod("GetFooBars");
IEnumerable<FooBarizable> FooBars = (IEnumerable<FooBarizable>)method.invoke(null, null);
show(FooBars);
}
...
}
因此,我的问题是我想使用类型从管理器获取对象集合,但强制子类实现 " getFooBars()" 方法。
我面临的问题如下:
1. .Net不允许定义静态抽象方法,因此我无法创建 "public static abstract IEnumerable < FooBarizable > GetFooBars()" 并强制子类实现它。
2. 实现的方式不强制子类实现该方法,但我尝试至少抛出一个 "NotImplementedException"。问题在于当我在管理器中调用 "MethodInfo method = type.GetMethod("GetFooBars");" 时,如果子类没有实现该方法,则 "method" 为null,并且调用 "NullPointerException"。
3. 我已经尝试创建一个实例方法而不是静态方法,它解决了实施问题,因为子类必须实现它,但对我来说似乎创建一个不必要的实例来调用一个方法不正确。
那么,有什么方法可以强制子类实现 "getFooBars()" 方法吗? 如果没有,则如何抛出 "NotImplementedException" 而不是 "NullPointerException"?
GetFooBars()
可以调用抽象实例方法(以某种方式将实例传递给它),这将需要在Foo
和Bar
中实现它。 - Sinatr