Beberapa tambahan cara menjalankan dengan kode gunting. Misalkan Anda memiliki kelas yang mirip dengan
public class Encoder() {
public void Markdown(IEnumerable<FooContent> contents) { do magic }
public void Markdown(IEnumerable<BarContent> contents) { do magic2 }
}
Misalkan saat runtime Anda memiliki FooContent
Jika Anda dapat mengikat pada waktu kompilasi yang Anda inginkan
var fooContents = new List<FooContent>(fooContent)
new Encoder().Markdown(fooContents)
Namun Anda tidak dapat melakukan ini saat runtime. Untuk melakukan ini saat runtime, Anda harus melakukannya di sepanjang baris:
var listType = typeof(List<>).MakeGenericType(myType);
var dynamicList = Activator.CreateInstance(listType);
((IList)dynamicList).Add(fooContent);
Untuk memohon secara dinamis Markdown(IEnumerable<FooContent> contents)
new Encoder().Markdown( (dynamic) dynamicList)
Perhatikan penggunaan dynamic
dalam pemanggilan metode. Saat runtime dynamicList
akan List<FooContent>
(juga sedang IEnumerable<FooContent>
) karena bahkan penggunaan dinamis masih di-rooting ke bahasa yang sangat diketik, binder waktu berjalan akan memilih Markdown
metode yang sesuai . Jika tidak ada pencocokan jenis yang tepat, ia akan mencari metode parameter objek dan jika tidak ada yang cocok dengan pengecualian binder runtime akan dimunculkan mengingatkan bahwa tidak ada metode yang cocok.
Yang jelas menarik kembali ke pendekatan ini adalah hilangnya besar jenis keselamatan pada waktu kompilasi. Namun demikian, kode di sepanjang garis ini akan memungkinkan Anda beroperasi dalam arti yang sangat dinamis yang pada saat runtime masih diketik sepenuhnya seperti yang Anda harapkan.