2011-06-29 15 views
6

this sorusuna kadar bir soru olarak, bir modülde bir F # işlevinin (muhtemelen bir öznitelik yoluyla) Intellisense'den "gizlenen" olarak işaretlenmesinin mümkün olup olmadığını merak ediyorum. Özetlemek gerekirse, inline olarak işaretlenmiş bazı işlevlerim var, ancak gerçekten ifşa etmek istemediğim diğer işlevler açısından uygulanmaktadır. Bu yüzden, uygulama işlevleri kamuya açık tutulmalıdır (çünkü bunlar satır içinde olduklarından), geçmişte Visual Studio Intellisense'den gizlenmiş C# yöntemlerine rastladım ama ne olduğunu bilseydiniz iyi bir şekilde derledim. Kesin yöntem (ler) i hatırlamayın ve bir tür geçici Visual Studio olayı veya DebuggerBrowsable(DebuggerBrowsableState.Never) farkındalık gibi kullanılabilir bir özellik olup olmadığından emin değilim.Bir modül işlevini Intellisense keşfinden "gizli" olarak işaretlemek mümkün mü?

Güncelleme: Ben EditorBrowsable(EditorBrowsableState.Never) kullanmaya çalıştınız ancak Visual F # projelerde çalışmak için görünmüyor.

+0

Bir seçenek 'helper' işlevlerini ad alanında veya 'Internal' içeren bir adla sınıfa yerleştirmektir. Bir istemci gerçekten onları kullanmak istiyorsa, işlevler kullanıma hazırdır, ancak en azından şimdi, kütüphanenin bir müşterisinin doğrudan kullanım için tasarlanmadıklarını görebileceği bir alana bölünmüştür. –

+0

@Dan Bryant - gerçekten, kullandığım mevcut çözüm budur, teşekkürler. –

cevap

5

Son zamanlarda bunu yapmaya çalıştım ve eminim ki F # EditorBrowsable özniteliğini yok sayar.

Bildirimin IntelliSense'den silinmesinin tek yolu ObsoleteAttribute kullanmaktır, ancak bu aynı zamanda işlevi kullandığınızda da bir uyarı alacağınız anlamına gelir. Bu biraz talihsiz, ama uyarıyı devre dışı bırakabilir nereye sadece bazı uygulama dosyasından işlevini kullanın sakıncası olabilir:

Bildirgesi tek bir dosyada: uyarı ve devre dışı bırakır

module Internal = 
    [<System.ObsoleteAttribute>] 
    let foo = 10 

Uygulama dosyası foo kullanır:

// Disable 'obsolete' warning 
#nowarn "44" 

// 'Internal' is empty (and is not shown in the completion list) 
Internal.foo 

nitelik modüller, işlevleri ve türleri uygulanan, bu yüzden oldukça esnektir edilebilir.

+2

F # hakkında EditorBrowsable onurlandıran bir hata dosyayorum. – Brian

+0

Teşekkür ederim Tomas, bu geçici çözüm mükemmel –

+0

FYI - VS2012 içinde F # hala EditorBrowsable özniteliğini yok sayar (ancak ObsoleteAttribute hala kullanılabilir bir çözümdür). –

2

[EditorBrowsable(EditorBrowsableState.Never)]'u kullanabilirsiniz, ancak bu yalnızca derlemenizin aynı çözümde olmayan istemcilerde çalışacaktır (yani, sınıf kitaplığınızı bir Proje olarak değil, bir derleme olarak içe aktarma). Aynı çözümdeki projeler yine de gösterecektir. Intellisense'de yöntemler.

İlgili konular