Entwickler-Ecke

Andere .NET-Sprachen - Sichtbarkeiten von Typen


Mitmischer 1703 - Fr 06.11.09 19:41
Titel: Sichtbarkeiten von Typen
Hi DF!

Ich hab gleich probiert in Prism Großteile von Delphi einzubauen Im Moment stehe ich vor folgendem Problem


Delphi-Prism-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
namespace WindowsApplication1;

interface

uses
  System.Collections.Generic,
  System.Linq,
  System.Text;

type
  Nations =  (
  n1, n2, n3);

  Army = record
  private
  public

  end;

  BeeNation = public class
  private
   fWorkers : Integer;
   fNation : Nations;
   fArmy : Army;
   
  protected
  public
    property Workers : Integer read fWorkers;
    property Nation : Nations read fNation;
  end;
  
implementation

end.


1. Er compiliert durch und wirft mir als Fehler: Fehler 1 (PE114) Der aus Typ "WindowsApplication1.BeeNation" verwendete Typ "WindowsApplication1.Nations" muss public sein H:\Backup\Borland\Delphi Prism\BeeWars\BeeWars\WindowsApplication1\BeeNation.pas 29 21 WindowsApplication1

Es hapert an der Property Nation vom Typ Nations - Ich verstehe jetzt nicht, warum Nations private sein soll?! :nixweiss: Es ist doch eigentlich ein ganz normaler Typ - die property Workers funzt ja auch für den Typen Integer!


Christian S. - Fr 06.11.09 19:48

Typen, die Du ohne eine Sichtbarkeitsangabe deklarierst, haben standardmäßig die Sichtbarkeit assembly (äquivalent zu internal in C#).

Wenn Du also in einer public-Klasse eine public-Property hast, kann der Typ keine geringere Sichtbarkeit haben. Du musst Nations also so deklarieren:

Delphi-Prism-Quelltext
1:
2:
Nations = public (
  n1, n2, n3);


Mitmischer 1703 - Fr 06.11.09 19:49

Okay, danke!

Mit welcher Sichtbarkeitsstufe kann man assembly denn in Pascal vergleichen?


Christian S. - Fr 06.11.09 19:51

Kennt pascal inzwischen Typensichtbarkeit? :gruebel:

assembly ist eigentlich sehr sprechend: Es ist nur innerhalb des Assemblies (also der DLL oder EXE) zu sehen, für andere Assemblies unsichtbar.


Mitmischer 1703 - Fr 06.11.09 19:57

:shock: Aber dann müsste Nations doch sichtbar sein : gleiche EXE und sogar gleicher namespace ! :?

PS: Ich meinte Delphi / Object Pascal ;))


Christian S. - Fr 06.11.09 20:00

user profile iconMitmischer 1703 hat folgendes geschrieben Zum zitierten Posting springen:
:shock: Aber dann müsste Nations doch sichtbar sein : gleiche EXE und sogar gleicher namespace ! :?

Du willst aber ein public-Property in einem public-Typen damit deklarieren. Beides wäre auch außerhalb des Assemblies sichtbar. Da es ja aber nicht sein kann, dass der Name der Property außerhalb sichtbar ist, ihr Typ aber nicht, muss der auch public sein.


Mitmischer 1703 - Fr 06.11.09 20:06

Achso, okay :autsch:

Danke!