Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Inkonsistenten Zugriff vermeiden
Getränke Hoffmann
myCSharp.de - Member



Dabei seit:
Beiträge: 177
Herkunft: Köln

Themenstarter:

Inkonsistenten Zugriff vermeiden

beantworten | zitieren | melden

Folgendes Verhalten finde ich recht nervig:

ich habe eine Klasse, nennen wir sie ClassA.

Diese ist wie folgt definiert:


namespace MyApp
{
    class ClassA
    {
// usf

nun will ich innerhalb einer anderen Klasse (ClassB) diese ClassA verwenden:


namespace MyApp
{
    class ClassB
    {

         private ClassA clA;

         public ClassA ClA
         {
              get{return clA;}
          }
// usf.

Nun wird beim Versuch zu kopilieren angezeigt, dass es einen Fehler aufgrund von inkonsistentem Zugriff gäbe. Der Grund ist, dass in ClassB bei der Accessor Methode

public ClassA
steht. Das ist nur erlaubt, sofern ich ClassA selber mit


namespace MyApp
{
    public class ClassA
    {


deklariere. Gibt es da eine sinnvollere Lösung für?
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 6.862
Herkunft: Esslingen

beantworten | zitieren | melden

Nunja, du musst schon wissen was du willst. Wenn du deine Klasse als privat deklarierst(indem du sie nicht public machst) sie dann aber über nen Property öffentlich nach außen gibst(wo man sie ja nicht kennen sollte weil sie privat ist), dann stimmt irgendwas in der Logik nicht.
Baka wa shinanakya naoranai.

Mein XING Profil.
private Nachricht | Beiträge des Benutzers
Getränke Hoffmann
myCSharp.de - Member



Dabei seit:
Beiträge: 177
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

Die soll ja nur von aussen gelesen, nicht aber verändert werden können. Daher mache ich sie teilweise öffentlich, setze aber keine Set Property.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Getränke Hoffmann,

auch wenn sie nur von außen gelesen werden soll, muss sie außen bekannt sein.

herbivore
private Nachricht | Beiträge des Benutzers
Traumzauberbaum
myCSharp.de - Member



Dabei seit:
Beiträge: 512

beantworten | zitieren | melden

Der Code der hier steht wird wunderbar funktionieren. Der Code der bei dir steht wird noch ein "public" vor dem "class ClassB" haben.

Ist auch logisch. Wenn du ClassB public definierst, können andere Assemblies sie verwenden. Andere Assemblies müssen dann auf alle Properties und Methoden zugreifen können. Um das zu können, müssen die Assemblies aber auch alle Typen der Parameter und Properties kennen. Wenn ClassA nicht public definiert ist, kennen die anderen Assemblies ClassA auch nicht.

Entweder du machst beide public, oder beide internal (= visibility Schlüsselwort weglassen)
e.f.q.

Aus Falschem folgt Beliebiges
private Nachricht | Beiträge des Benutzers