C# 'da içten (açığa çıkarılmamış) türetilebilir bir sınıf yapmak mümkün, ancak daha sonra diğer insanların benim dış sınıftan benim public sınıfımdan (mühürlü) miras almalarına engel oluyor?Sızdırmaz, içten dışa kapalı bir sınıf oluşturabilir miyim?
cevap
internal
sınıfının kurucusunu yapabilmeniz için, derlemenizdeki diğer sınıfların bunlardan türemesini sağlayabilirsiniz, böylece hala bu sınıfın örneklerini oluşturmanız gerekiyorsa, örnekleri döndürmek için bir fabrika yöntemi sağlayabilirsiniz.
public class MyFoo
{
internal MyFoo()
{
}
public static MyFoo CreateFoo()
{
return new MyFoo();
}
}
Eric Lippert'ın Bunu yapmak için üç yol notları:
düzenlemek bir örnek ekleyin. tl; dr: sınıfınızı mühürlemeyin, ancak sınıfınızda dahili bir soyut yöntem kullanın ya da tüm kurucuları dahili veya özel yapın ya da sınıfa meta veriler eklemek için PermissionSet
özniteliğini kullanın.
Ayrıca böyle bir şey yaptığını deneyebilirsiniz.
internal class InternalExtendible
{
public string MyProperty { get; set; }
}
public sealed class ExternalSealedClass : InternalExtendible
{
}
Bir iç sınıf oluşturun ve iç sınıftan miras alınan ortak bir boş sınıf oluşturun. Dll'ye başvururken, yalnızca genel sınıf kullanıcı tarafından görülebilir, ancak iç sınıfın tüm işlevselliği ortaya çıkar.
Benim için meydana gelen, ancak büyük sorun şu ki bu tip tüketen veya dönen kamu erişilebilir yöntemler varsa - imza nedir? 'ExternalSealedClass' kullanırsanız, 'gerçek' mirasçılarınız uygun olmayacaktır. 'InternalExtensible' kullanıyorsanız, yöntemleriniz artık herkese açık olamaz. – mquander
@mquander Bir arabirime programlama yaparak bunun etrafından dolanmadınız mı? imzanız "void DoSomething (IExtendableOrSealed item) {...}" gibi görünür. – Michael
- 1. Bir sunucudan bir iş parçacığı oluşturabilir miyim?
- 2. Google Spreadsheets Komut Dosyası'ndan bir dosya oluşturabilir miyim?
- 3. SQLite'de hesaplanmış sütunlar oluşturabilir miyim?
- 4. Xamarin.Mac kullanarak bir konsol uygulaması oluşturabilir miyim?
- 5. Scala'da Java korumalı bir yöntem oluşturabilir miyim?
- 6. Ruby ile bir masaüstü uygulaması oluşturabilir miyim?
- 7. Git için özel bir protokol oluşturabilir miyim?
- 8. Piksel gölgelendiricide bir çini motoru oluşturabilir miyim?
- 9. Kafkas konu başlığından bir RDD oluşturabilir miyim?
- 10. Tek bir bayt (u8) dilim oluşturabilir miyim?
- 11. Projeye özel kod parçacıkları oluşturabilir miyim?
- 12. Fortran'da işaretçiler kullanarak alt diziler oluşturabilir miyim?
- 13. Unity3D ile görüntülü sohbet uygulaması oluşturabilir miyim?
- 14. jQuery tarafından komut dosyası oluşturabilir miyim?
- 15. Son anahtardan özel anahtar oluşturabilir miyim?
- 16. Linq kullanarak IEnumerables'tan Tuples oluşturabilir miyim?
- 17. Coffeescript dosyasından bir sınıf dışa aktarma
- 18. .NET Çekirdeği ile UWP oluşturabilir miyim?
- 19. Gizli bir argümanı olan bir işlev oluşturabilir miyim?
- 20. Bir cuda programı olmadan bir cuda programı oluşturabilir miyim
- 21. Bir çerezin ne kadar büyük bir kısmını oluşturabilir miyim?
- 22. Bir dışa aktarma ismini es6 modülünde değiştirebilir miyim?
- 23. eşleştirme alanları içten MongoDB
- 24. Dinamik olarak oluşturulmuş XML'den bir JSP oluşturabilir miyim?
- 25. Bir Site Haritasından ASP.NET MVC rotaları oluşturabilir miyim?
- 26. SQL Server 2008'de bir "Covering, Spatial" dizini oluşturabilir miyim?
- 27. Visual Studio'da .Designer.cs dosyasının yanında bulunan bir dosya oluşturabilir miyim?
- 28. JavaScript (istemci tarafı) kullanarak bir websocket sunucusu oluşturabilir miyim?
- 29. VS2010'da bir web sitesi proje türü oluşturabilir miyim
- 30. Powershell'de [alias ("db")] olan parametreli bir komut dosyası oluşturabilir miyim?
Harika çalışıyor. Teşekkürler! –