के साथ सी # विधि पॉलीमोर्फिज्म का प्रदर्शन मैंने सी # में विपरीत सी # में देखा, आप वर्चुअल और जेनेरिक तरीकों को जोड़ सकते हैं। उदाहरण के लिए:जेनिक्स
using System.Diagnostics;
class Base {
public virtual void Concrete() {Debug.WriteLine("base concrete");}
public virtual void Generic<T>() {Debug.WriteLine("base generic");}
}
class Derived : Base {
public override void Concrete() {Debug.WriteLine("derived concrete");}
public override void Generic<T>() {Debug.WriteLine("derived generic");}
}
class App {
static void Main() {
Base x = new Derived();
x.Concrete();
x.Generic<PerformanceCounter>();
}
}
यह देखते हुए कि Generic<T>
के संस्करणों के किसी भी संख्या instantiated जा सकता है, यह देखने के लिए नहीं है मानक vtbl
दृष्टिकोण की तरह विधि कॉल को हल करने के लिए इस्तेमाल किया जा सकता है, और वास्तव में यह नहीं है। यहाँ उत्पन्न कोड है:
x.Concrete();
mov ecx,dword ptr [ebp-8]
mov eax,dword ptr [ecx]
call dword ptr [eax+38h]
x.Generic<PerformanceCounter>();
push 989A38h
mov ecx,dword ptr [ebp-8]
mov edx,989914h
call 76A874F1
mov dword ptr [ebp-4],eax
mov ecx,dword ptr [ebp-8]
call dword ptr [ebp-4]
अतिरिक्त कोड में बुला सामान्य मानकों के अनुसार एक गतिशील vtbl को देख जा करने के लिए, और उसके बाद दिखाई देता है। क्या किसी ने इस कार्यान्वयन के विनिर्देशों के बारे में लिखा है? गैर-सामान्य मामले की तुलना में यह कितना अच्छा प्रदर्शन करता है?
बिल्कुल वही जो मैं खोज रहा था, धन्यवाद! – zildjohn01