我可以在c#中添加动态方法吗?
所以接口方法不存在但存在于底层类中,我想通过接口调用它。
谢谢
答案 0 :(得分:3)
这种方式违背了界面。如果你想要它在某些类而不是其他类,那么你可以用那种方式实现它,但你必须首先将它转换为已知的类类型。
你可以使用一些反射来检查底层类类型是否有你想要调用的方法,如果你想对它真的很挑剔(并避免知道要转换的类型)
答案 1 :(得分:0)
尝试创建一个实现原始接口的新接口,作为类和底层接口之间的“中间人”
public interface IFoo
{
string PropA { get; set; }
}
public interface IFooExtended
{
void MyMethod();
}
public class ConcreteFoo : IFooExtended
{
// implementation...
}
这不是“动态”,但这可能有所帮助。
答案 2 :(得分:0)
否 - 您可以在界面中添加扩展方法以实现类似的目标。
答案 3 :(得分:0)
我认为遵循的正确做法是尽可能接近你想要实现的目标是创建一个继承旧接口的新接口。
类似的东西:
interface IMyInterface : IExistingInterface
{
void MyCustomMethod();
}
您将在代码中处理新界面。实现它的类将包含您的新方法以及继承接口的方法。
您无法改变现有界面,这会破坏界面本身的目的。
答案 4 :(得分:0)
如果您在询问是否要使用动态界面(例如,在Visual Basic中使用强类型鸭子打字),那么否,C#不会原生支持这个。但您可以查看代码项目文章Dynamic interfaces in any .NET language。