Was ist eine interne versiegelte Klasse in C#?

Was ist eine interne versiegelte Klasse in C#?

Es ist eine Klasse, die:

  • internal :Kann nur innerhalb der definierten Assembly (oder befreundeter Assemblys) aufgerufen werden.
  • sealed :Kann nicht vererbt werden.

Klassen als internal markieren ist eine Möglichkeit, externe Benutzer einer Assembly daran zu hindern, sie zu verwenden. Es ist wirklich eine Form der Design-Kapselung und IMHO ist es eine gute Praxis, Typen zu markieren, die nicht Teil der beabsichtigten öffentlichen API-\Objektmodelle als internal sind . Langfristig verhindert dies, dass Benutzer Ihrer Bibliothek sich an Typen koppeln, die Sie nicht beabsichtigt haben. Diese Art der unbeabsichtigten Kopplung beeinträchtigt Ihre Fähigkeit, die Art und Weise, wie Ihre Bibliotheken implementiert sind, zu ändern und weiterzuentwickeln, da Sie sie nicht ändern können, ohne Ihre Clients zu beschädigen. Mit internal hilft, die öffentliche und nutzbare Fläche einer Bibliothek auf das vorgesehene Maß zu beschränken.

Klassen als sealed markieren verhindert, dass diese Klassen vererbt werden. Dies ist eine ziemlich drastische Designabsicht, die manchmal nützlich ist, wenn eine Klasse bereits so spezialisiert ist, dass es sinnvoll ist, ihr keine weitere Funktionalität durch Vererbung hinzuzufügen, weder direkt noch durch Überschreiben ihres Verhaltens.

internal und sealed Typen auf ganz unterschiedliche Weise modifizieren, aber sie können zusammen verwendet werden.

NB Sie haben eine weitere Kontrolle über den Geltungsbereich von internal da Sie eine Reihe anderer Baugruppen als "Freunde" definieren können. Diese Freundesgruppen können auf Ihr internal zugreifen Typen. Dies kann beim Definieren von Sätzen kooperierender Assemblys wie Produktions- und Testassemblys hilfreich sein. Es ist oft wünschenswert, dass eine Testassembly alle Typen in der getesteten Assembly sehen kann.


  • internal:Eine Klasse, auf die nur innerhalb derselben Assembly zugegriffen werden kann.

    Assembly1.dll:

    namespace test {
        internal class InternalClass {
        }
    
        public class PublicClass { 
        }
    } 
    

    Assembly2.dll:

    using test;
    ...
    InternalClass c1; // Error
    PublicClass c2; // OK
    
  • seal:Eine Klasse, von der nicht abgeleitet werden kann

    sealed class SealedClass { ... }
    
    class ChildClass : SealedClass {} //ERROR
    

Intern bedeutet, dass der Member für andere Typen zugänglich ist, die in derselben Assembly definiert sind. Eine versiegelte Klasse ist so etwas wie das Gegenteil von abstrakt. Sie kann instanziiert werden, aber nicht als Basisklasse dienen. Der Hauptgrund, eine Klasse zu versiegeln, besteht darin, Ihre Benutzer daran zu hindern, daran herumzuspielen und sie zu beschädigen. Es ist auch so, dass das Versiegeln einer Klasse bestimmte Compileroptimierungen zulässt, die mit nicht versiegelten Klassen nicht möglich sind.