接口是否有可能使已經編譯的類實現在運行時某個接口,一個例子:實現在運行時
public interface ISomeInterface {
void SomeMethod();
}
public class MyClass {
// this is the class which i want to implement ISomeInterface at runtime
}
這是可能的,如果是的話怎麼辦?
接口是否有可能使已經編譯的類實現在運行時某個接口,一個例子:實現在運行時
public interface ISomeInterface {
void SomeMethod();
}
public class MyClass {
// this is the class which i want to implement ISomeInterface at runtime
}
這是可能的,如果是的話怎麼辦?
差不多。你可以使用即興接口。
https://github.com/ekonbenefits/impromptu-interface
從https://github.com/ekonbenefits/impromptu-interface/wiki/UsageBasic基本例如:
using ImpromptuInterface;
public interface ISimpleClassProps
{
string Prop1 { get; }
long Prop2 { get; }
Guid Prop3 { get; }
}
var tAnon = new {Prop1 = "Test", Prop2 = 42L, Prop3 = Guid.NewGuid()};
var tActsLike = tAnon.ActLike<ISimpleClassProps>();
哦,非常好......我不知道那個圖書館,但爲了以防萬一,我會牢記它。 –
確實很棒,這可能是正確性最接近的答案,但我會給這個問題一些時間來看看是否還有更好的方法。編輯:這看起來非常有希望,因爲項目描述似乎是針對我正在尋找的確切領域。 –
您可以使用Adapter
模式,使其出現在實現該接口。這看起來有點像這樣:
public interface ISomeInterface {
void SomeMethod();
}
public class MyClass {
// this is the class which i want to implement ISomeInterface at runtime
}
public SomeInterfaceAdapter{
Myclass _adaptee;
public SomeInterfaceAdapter(Myclass adaptee){
_adaptee = adaptee;
}
void SomeMethod(){
// forward calls to adaptee
_adaptee.SomeOtherMethod();
}
}
使用這會看起來有點像這樣:
Myclass baseobj = new Myclass();
ISomeInterface obj = new SomeInterfaceAdapter(baseobj);
obj.SomeMethod();
號,你爲什麼要這麼做? – TyCobb
你不能讓MyClass實現ISomeInterface,但是你可以使用Reflection.Emit或其他一些技術來生成一個派生自MyClass的類並實現ISomeInterface。 –
您可以使用@ThomasLevesque建議的技術,但是如果您向我們提供您的用例,則可能有更好的方法來實現您想要的效果。 – Kenneth