2010-05-31 5 views
12

The IHideObjectMembers trick (a.k.a IFluentInterface) का उपयोग किया जा सकता है उदा। IntelliSense के System.Object सदस्यों को छिपाने के लिए धाराप्रवाह इंटरफेस कार्यान्वयन में। (आप इस चाल को नहीं जानते हैं, तो आप उस पर ऊपर के लिंक के माध्यम से पढ़ सकते हैं, मैं बस यहाँ इंटरफेस के सामान्य घोषणा दोहरा रहा हूँ :)वीएस इंटेलिसेन्स - IFluentInterface/IHideObjectMembers चाल काम नहीं करता है। क्यूं कर?

using System; 
using System.ComponentModel; 

[EditorBrowsable(EditorBrowsableState.Never)] 
public interface IHideObjectMembers 
{ 
    [EditorBrowsable(EditorBrowsableState.Never)] bool Equals(object obj); 
    [EditorBrowsable(EditorBrowsableState.Never)] int GetHashCode(); 
    [EditorBrowsable(EditorBrowsableState.Never)] Type GetType(); 
    [EditorBrowsable(EditorBrowsableState.Never)] string ToString(); 
} 

मैं अब छिपाने में सक्षम होना चाहिए कर रहा हूँ एक अन्य प्रकार पर System.Object सदस्यों इस प्रकार है:

public class SomeClass : IHideObjectMembers { ... } 

या:

public interface ISomeInterface : IHideObjectMembers { ... } 

मैं दोनों वी.एस. 2008 एक्सप्रेस और 2008 मानक में यह कोशिश की। हालांकि, इंटेलिसेन्स से कोई भी सदस्य छिपा नहीं है। मैंने विभिन्न परियोजनाओं में EditorBrowsableAttribute का उपयोग किया है और यह हमेशा अच्छी तरह से काम करता है; हालांकि, यह इस विशेष परिदृश्य में काम नहीं करता है।

http://i48.tinypic.com/vhb4fq.jpg

तो चीज़ें अपेक्षित ढंग से काम किया था, मैं केवल SomeMethodTwo विधि को देखा होगा।

क्या मुझे कुछ याद आ रही है?


पी.एस .: आप घोषणाओं और स्क्रीनशॉट से मेरे उदाहरण कोड अनुमान लगा सकते हैं। मेरे पास SomeMethodTwo नामक एक डमी विधि के साथ SomeClass है। बहुत आसान। मेरे पास नहीं इस कक्षा में चार System.Object विधियों को दोबारा लागू किया गया है, क्योंकि यह आवश्यक नहीं होना चाहिए।

+0

में सभी इंटरफेस के साथ ऐसा करने के बाद दृश्य स्टूडियो (2015, 2017) के हाल के संस्करणों में को संदर्भित करता है , 'IHideObjectMembers'/'IFluentInterface' को Roslyn बग द्वारा बेकार प्रदान किया जाता है; https://github.com/dotnet/roslyn/issues/4434 देखें। – stakx

उत्तर

7

चाल से काम करता है अगर आप

var x = new SomeClass(); 

का उपयोग नहीं करते लेकिन स्पष्ट रूप इंटरफेस विरासत कि IHideObjectMembers

ISomeInterface x = new SomeClass(); 

var से ठोस वर्ग के प्रकार लेता है का उपयोग करें। इस प्रकार IntelliSense object.ToString() और IHideObjectMembers.ToString() नहीं देखेगा। पूर्व को EditorBrowsableAttribute के साथ सजाया नहीं गया है जबकि बाद में है।

डैनियल Cazzulino पर स्पष्ट रूप इंटरफेस अपनी पोस्ट में

हम अपने धाराप्रवाह एपीआई

12

से पहले एक काम कर समाधान (ऊपर देखें) तैनात किया गया था, मैं शोध किया और एक सा प्रयोग किया, और इस में पता चला:

  • IntelliSense एक EditorBrowsableState बराबर Advanced या Never के साथ चिह्नित गुण अनदेखी करने के लिए कहा जा करने की जरूरत है । यह मेनू आइटम के माध्यम से दृश्य स्टूडियो में हासिल की है उपकरणविकल्प ...पाठ संपादकसी #IntelliSenseछिपाएं उन्नत सदस्यों

  • IHideObjectMembers चाल केवल "अन्य" असेंबली से ही काम करती है, और केवल तभी जब IHideObjectMembers का उपयोग करने वाली परियोजना उसी समाधान में लोड नहीं होती है।

  • छिपाई जा रही है object की गैर स्थिर सदस्य कभी कभी जब एक IHideObjectMembers इंटरफ़ेस के माध्यम से किया काम नहीं करता है, लेकिन यह काम करता है जब तरीकों को स्पष्ट रूप से वर्ग ... जो दुर्भाग्य से पता चला छुपा तकनीक कम उपयोगी बनाता में सीधे अधिरोहित कर रहे हैं।इन सुराग की

सूत्रों का कहना है:

+0

दिलचस्प। मैं वीएस 2010 का उपयोग कर समाधान के बाहर या अंदर काम करने में सक्षम नहीं हूं। –

+1

+1 यह मान सकता है कि यह आपके काम पर केवल दूसरा अपवर्त है। (वीएस 10 पर निदान करने की कोशिश कर रहे हैं) –

+1

एनबी एक वीएस 10 मुद्दा नहीं था - यह सब बदलता है कि कोई भी जांच करने के लिए उन्नत सदस्यों को सेट नहीं करता है। यह तब तक काम करता है जब तक यह एक परियोजना संदर्भ नहीं है। एक नकारात्मक मैंने देखा है कि Ctrl।, इंटरफेस को कार्यान्वित करें अब स्पष्ट रूप से 4 विधियों को उत्पन्न करता है (क्योंकि यह केवल 'असली विधि' गायब होने पर ही खुद को ऑफ़र करता है) लेकिन मुझे लगता है कि जीवन चल रहा है। (वीएस 08 में समान नकारात्मक लागू होता है) –

4

यह चाल केवल तभी काम करती है जब आप संदर्भित डीएलएल में शामिल प्रकारों का उपयोग कर रहे हों। ये संदर्भित असेंबली विजुअल स्टूडियो परियोजना संदर्भ नहीं हो सकते हैं। यदि आप स्वयं डीएलएल का संदर्भ देते हैं, तो चाल आपके लिए काम करनी चाहिए।

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

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