Ric*_*nop 5 .net c# oop abstract-class interface
如果我有一个扩展抽象类并实现接口的类,例如:
class Example : AbstractExample, ExampleInterface
{
// class content here
}
Run Code Online (Sandbox Code Playgroud)
如何初始化这个类,以便我可以从接口和抽象类访问方法?
当我做:
AbstractExample example = new Example();
Run Code Online (Sandbox Code Playgroud)
我无法从界面访问方法.
最后一个例子将你绑定到一个接口或抽象类的实体实例,我认为这不是你的目标.坏消息是你不是在这里使用动态类型的语言,所以你坚持要么引用一个固定的"示例"对象,如先前的sprcified或cast/uncasting,即:
AbstractExample example = new Example();
((IExampleInterface)example).DoSomeMethodDefinedInInterface();
Run Code Online (Sandbox Code Playgroud)
你的其他替代方法是让AbstractExample和IExampleInterface都实现一个通用接口,这样你就可以了
abstract class AbstractExample : ICommonInterface
interface IExampleInterface : ICommonInterface
class Example : AbstractExample, IExampleInterface
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用ICommonInterface,并具有抽象类和IExample接口实现的功能.
如果这些答案都不可接受,您可能需要查看一些在.NET框架下运行的DLR语言,即IronPython.
如果您只知道抽象类,则表明您通过实例知道实际类型Type.因此,您可以使用泛型:
private T SomeMethod<T>()
where T : new(), AbstractExample, ExampleInterface
{
T instance = new T();
instance.SomeMethodOnAbstractClass();
instance.SomeMethodOnInterface();
return instance;
}
Run Code Online (Sandbox Code Playgroud)