2009-04-06 16 views
42

Yalnızca iç türlerini içeren birkaç ad alanına sahip bir sınıf kitaplığım var. Ancak, bir uygulama projesinde sınıf kütüphanesi kullanıldığında, ad alanları intellisense'de görünür, ancak elbette boştur. Diğer projelerde intellisense kullanırken isim alanlarını tamamen gizlemenin bir yolu var mı?Sadece bir sınıf kitaplığında yalnızca iç türleri içeren adlar gizleniyor mu?

Tüm iç sınıflara da EditorBrowsableAttribute numaralı uygulamayı uyguladım, ancak yapmak istediğim ad alanına bunu uygulamak imkansız olurdu.

Ya da, eğer bunun için yeterince ilgilenirseniz, yalnızca türleri genel türleri içeren bir ad alanına taşımak zorunda olduğum tek seçenek mi?

+1

Bu, Google için zor bir şeydi ... her şey bir ad alanı veya derleme içinde bir sınıfı gizlemek isteyen insanlar için ortaya çıktı. – Panzercrisis

cevap

43

Bu sınıf kütüphanesi baþvurduðunuzu bağlıdır:

  • sınıf kütüphanesi proje, çözümünüz içinde bulunan ve bir proje başvurusu kullanın varsa, her zaman IntelliSense aracılığıyla o boş ad göreceksiniz.
  • Sınıf kitaplığınızın derlenmiş bir dll'sine başvuruyorsanız, yalnızca iç üyeler içermesi koşuluyla, intellisense'de açılan ad alanını göremezsiniz.

bu deneyin: Bir proje referansı ile bu başvurursanız

namespace ClassLibrary1 
{ 
    namespace Internal 
    { 
     internal class InternalClass 
     { 
      public int internalStuff { get; set; } 
     } 
    } 

    namespace Public 
    { 
     public class PublicClass 
     { 
      public int publicStuff { get; set; } 
     } 
    } 
} 

, boş ad göreceksiniz. Eğer bir dll başvurursanız, yapmazsınız.

+0

Bu cevabı okumadan önce, başlıyordum Projenin kök ad alanı içinde tutulurken sınıfları ve nesneleri alt klasörlere ayırın, ancak bu gerçekten doğru bir şey hissetmiyordu. Kesinlikle onlarla sadece proje referansları ile görünür halde yaşayabiliyorum, bu yüzden şimdi eklemeye başlayacağım. alt ad alanları. – Panzercrisis

5

Daha önce buna karşı çıktım ve hiçbir çözüm bulamadınız, sadece projenizde çalışabilecek veya çalışmayabilecek bir geçici çözüm. Bir isim alanını tanımlamak yerine yuvalanmış bir statik sınıf kullanabilirdiniz?

+0

Evet, bunu yapabilirdim, ancak daha sonra tüm referansları yeniden yazmam gerekiyordu, çünkü yuvalanmış sınıfların yerdeki nitelikli ismin bir parçası olması gerekecek. yani. Bunu yazmam gerek: var x = new NotReallyANamespace.ClassName(); sadece kullanma yönergesini eklemek yerine. Ama fikir için +1 :) –

+0

Biliyorum, bu mükemmel bir şekilde uzun bir yol :( –

+2

Şimdi bu C# 'statik kullanıyor', iç içe geçmiş statik sınıf yaklaşımı biraz daha kolay hale geldi. – stakx

İlgili konular