Bazı ek makas kodu ile çalıştırmak için nasıl. Diyelim ki benzer bir sınıfınız var
public class Encoder() {
public void Markdown(IEnumerable<FooContent> contents) { do magic }
public void Markdown(IEnumerable<BarContent> contents) { do magic2 }
}
Çalışma zamanında bir FooContent'iniz olduğunu varsayalım
Eğer derleme zamanında bağlamak mümkün olsaydı
var fooContents = new List<FooContent>(fooContent)
new Encoder().Markdown(fooContents)
Ancak bunu çalışma zamanında yapamazsınız. Çalışma zamanında bunu yapmak için aşağıdakiler boyunca yapardınız:
var listType = typeof(List<>).MakeGenericType(myType);
var dynamicList = Activator.CreateInstance(listType);
((IList)dynamicList).Add(fooContent);
Dinamik olarak çağırmak için Markdown(IEnumerable<FooContent> contents)
new Encoder().Markdown( (dynamic) dynamicList)
dynamic
Yöntem çağrısında kullanımını not edin . Dinamik kullanım bile güçlü bir şekilde yazılmış bir dile kök saldığından çalışma zamanında (ek olarak da dynamicList
olacaktır ) çalışma süresi bağlayıcı uygun yöntemi seçecektir . Tam tür eşleşmesi yoksa, bir nesne parametresi yöntemi arar ve hiçbir eşleşme eşleşmezse, hiçbir yöntem eşleşmediğini bildiren bir çalışma zamanı bağlayıcı istisnası yükseltilmez.List<FooContent>
IEnumerable<FooContent>
Markdown
Bu yaklaşıma bariz bir geri dönüş, derleme zamanında büyük bir tip güvenlik kaybıdır. Bununla birlikte, bu satırlar boyunca kod, çalışma zamanında beklediğiniz gibi hala tam olarak yazıldığı çok dinamik bir anlamda çalışmanıza izin verecektir.