Benzer bir şekilde, C # temel olarak birisinin genellikle pense ve ayarlanabilir anahtarlardan kaçınmanız gerektiğini okuduğu bir dizi mekanik araca benzer, bu nedenle hiçbir zaman ayarlanabilir anahtarlar içermez ve pense "güvensiz" olarak işaretlenmiş özel bir çekmeceye kilitlenir ve işvereninize sağlığınızla ilgili herhangi bir sorumluluktan vazgeçen bir feragatnameyi imzaladıktan sonra ancak bir süpervizörün onayı ile kullanılabilir.
C ++, kıyaslandığında, yalnızca ayarlanabilir anahtarlar ve penseler değil, aynı zamanda amacı hemen belli olmayan garip toplu özel amaçlı araçlar içermez ve onları tutmanın doğru yolunu bilmiyorsanız, kolayca kesebilirler. thumb (ancak onları nasıl kullanacağınızı anladıktan sonra, C # araç kutusundaki temel araçlarla temel olarak imkansız olan şeyleri yapabilirsiniz). Ek olarak, ihtiyaç duyduğunuz zaman tamamen yeni aletler tasarlamanıza ve yaratmanıza olanak tanıyan bir torna, freze tezgahı, yüzey taşlama makinesi, metal kesme şerit testere, vb. Vardır (ancak, bu makinistlerin aletleri neden olabilir ve Onlarla ne yaptığınızı bilmiyorsanız (veya sadece dikkatsiz olsanız bile) ciddi yaralanmalar.
Bu, felsefedeki temel farkı yansıtır: C ++, temel olarak isteyebileceğiniz herhangi bir tasarım için ihtiyaç duyabileceğiniz tüm araçları size vermeye çalışır. Bu araçları nasıl kullandığınızı kontrol etmeyi neredeyse hiç denemez, bu nedenle, yalnızca nadir durumlarda iyi işleyen tasarımların yanı sıra muhtemelen sadece berbat bir fikir olan ve hiç kimsenin durumdan haberi olmayan tasarımlar üretmek için de kullanımı kolaydır. iyi çalışacaklar. Özellikle, bunun büyük bir kısmı tasarım kararlarının ayrıştırılmasıyla yapılır - pratikte neredeyse her zaman birbirine bağlı olanlar bile. Sonuç olarak, sadece C ++ yazmakla C ++ yazmak arasında çok büyük bir fark var. C ++ 'ı iyi yazmak için, bir çok deyim ve kurallara dikkat edin (kurallara uymadan önce kuralların ne kadar ciddiye alınacağına dair kurallar dahil). Sonuç olarak, C ++, öğrenme kolaylığına (uzmanlar tarafından) kullanım kolaylığına çok daha fazla yönelmiştir. Ayrıca kullanımının gerçekten de çok kolay olmadığı durumlar da var.
C # (veya en azından kuvvete denemek için çok daha fazla yapar son derece güçlü önermek) dil tasarımcıları iyi tasarım uygulamalarını ne kabul. C ++ 'da ayrılan (ancak genellikle pratikte bir arada olan) bir kaç şey doğrudan C #' da bir araya getirilir. "Güvensiz" kodun sınırları biraz zorlamasına, ancak dürüst olmak gerekirse, çok fazla olmasına izin vermez.
Sonuç olarak, bir yandan doğrudan C ++ 'da ifade etmek için oldukça beceriksiz olan doğrudan C ++ ile ifade edilebilen birkaç tasarım vardır. Öte yandan, bu bir var bütün C # öğrenmek için çok daha kolay ve durumunuza değil iş (veya muhtemelen başka) olan bir gerçekten korkunç bir tasarım üretme şansı büyük ölçüde azalttı. Çoğu (muhtemelen çoğu durumda) durumlarda, tabiri caizse "akışa devam ederek" sağlam ve uygulanabilir bir tasarım elde edebilirsiniz. Ya da arkadaşlarımdan biri olarak (en azından onu arkadaş olarak düşünmeyi seviyorum - gerçekten de kabul ederse emin değil) koymaktan hoşlanıyor, C # başarının çukuruna düşmeyi kolaylaştırıyor.
Bu nedenle , iki dilde nasıl oldukları class
ve struct
nasıl oldukları sorusuna daha özel bir şekilde bakalım: türetilmiş bir sınıfın nesnesini temel sınıf / arabirim kılığında kullanabileceğiniz bir kalıtım hiyerarşisinde yaratılan nesneler, oldukça normalde bir çeşit işaretçi veya referans yoluyla yapmanız gerekmesi gerçeğiyle sıkışmış durumda - somut bir seviyede, türetilmiş sınıfın nesnesinin temel sınıfın bir örneği olarak ele alınabilecek bir şey içerdiği / arayüz ve türetilmiş nesne, hafızanın o kısmının adresi aracılığıyla manipüle edilir.
C ++ 'da bunu doğru yapmak programcının görevidir - kalıtım kullanırken, bir hiyerarşideki polimorfik sınıflarla çalışan bir işlevin bunu bir işaretçi veya taban referansı ile yapmasını sağlamak ona bağlıdır. sınıf.
C # 'da, temelde türler arasındaki aynı ayrımın ne olduğu daha açıktır ve dilin kendisi tarafından uygulanır. Programcının bir sınıfın örneğini referans olarak geçmek için herhangi bir adım atması gerekmez, çünkü bu varsayılan olarak gerçekleşir.
struct
her zaman yığında saklanmaz;struct
alanı olan bir nesneyi düşünün . Bu bir yana, Mason Wheeler'ın belirttiği gibi, dilimleme problemi muhtemelen en büyük sebep.