2010-11-10 14 views
7

मुझे यह पता लगाने में परेशानी हो रही है कि पावरहेल को मेरी कक्षा में इंडेक्सर कैसे कॉल करें। वर्ग कुछ इस तरह (बेहद सरलीकृत) दिखता है:PowerShell से सी # कक्षा पर इंडेक्सर को कैसे कॉल करें?

public interface IIntCounters 
{ 
    int this[string counterName] { get; set; } 
} 

public class MyClass : IIntCounters 
{ 
    public IIntCounters Counters { get { return this; } } 

    int IIntCounters.this[string counterName] 
     { get { ...return something... } } 
} 

अगर मैं मैं सिर्फ इस पर ब्रैकेट ऑपरेटर का उपयोग नहीं कर सकते हैं इस वर्ग के लिए नए - मैं त्रुटि एक "सूचकांक करने में असमर्थ" मिलता है। मैंने get_item() का उपयोग करने का भी प्रयास किया, जो कि प्रतिबिंबक मुझे दिखाता है कि इंडेक्सर अंततः असेंबली में बन जाता है, लेकिन इससे मुझे "get_item नामक विधि शामिल नहीं है" त्रुटि मिलती है।

अद्यतन: इस स्पष्ट इंटरफेस के अपने उपयोग के लिए विशिष्ट प्रकट होता है। तो मेरा नया सवाल यह है: क्या पावरहेल को इंडेक्सर को स्पष्ट इंटरफेस से दूर किए बिना देखने का कोई तरीका है? (मैं वास्तव में इस विधानसभा यदि संभव हो तो संशोधित करने के लिए नहीं करना चाहती।)

उत्तर

4

यह काम करता है मुझे (के लिए प्रतिबिंब का उपयोग करता है):।

$obj = new-object MyClass 
$p = [IIntCounters].GetProperty("Item") 
$p.GetValue($obj, @("counterName")) 
+0

हाँ! धन्यवाद। – scobi

2

मैं इस प्रयास नहीं किया है, लेकिन ऐसा लगता है जैसे कि यह काम करना चाहिए:

$obj = new-object MyClass 
$counters = [IIntCounters]$obj 
$counters['countername'] 

(ठीक है, मैं एक छोटे से आसपास खेला और मैं अब लगता है कि यह काम करने के लिए की संभावना है, लेकिन यह अभी भी एक कोशिश लायक हो सकता है)

+0

हाँ कि काफी $ obj.Counters की तरह ही है ['काउंटरनाम'] .. काम नहीं कर रहा है। :( – scobi

+2

कारण मैंने सोचा कि यह काम कर सकता है यह है कि स्पष्ट रूप से कार्यान्वित इंटरफ़ेस केवल इंटरफ़ेस के संदर्भ के माध्यम से पहुंच योग्य है, कार्यान्वयन वर्ग के संदर्भ के माध्यम से नहीं। दुर्भाग्यवश, जब आप किसी इंटरफ़ेस संदर्भ के लिए क्लास संदर्भ डालेंगे, तो PowerShell अभी भी दिखता है सबसे अधिक व्युत्पन्न वर्ग के संदर्भ में। – OldFart

+0

सही है, लेकिन 'काउंटर' को कॉल करना एक द्वितीय काउंटर देता है, जो इंटरफ़ेस का संदर्भ है, न कि कक्षा में। आपका बिंदु कक्षा के लिए इंटरफ़ेस को देखकर पॉश के बारे में दिलचस्प है हालांकि, अगर यह हमेशा सही ठोस वस्तु को खोजने के संदर्भों पर प्रतिबिंबित करता है तो यह इस समस्या को समझा सकता है। एचएम .. स्पष्ट इंटरफ़ेस इंडेक्सर्स को लपेटने वाले नए तरीकों को स्थापित करने में सक्षम हो सकता है .. – scobi

संबंधित मुद्दे