Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] Public enum niet aanspreekbaar vanuit andere class

Pagina: 1
Acties:
  • 686 views sinds 30-01-2008
  • Reageer

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
Ik ben lekker aan het hobbyen met C# en om een bepaalde status van mijn programma bij te houden heb ik een array van booleans (primitief :P ) meerdere statussen kunnen tegelijkertijd waar zijn. Maarja als je in je code hebt "if (StatusArray[3] == true && StatusArray[5] == true)" is dat niet even duidelijk na een tijdje.

Dus ik dacht ik gebruik een enum. Die ik vanuit heel mijn applicatie kan gebruiken.. lekker handig en als er dan iets veranderd hoef ik maar op 1 plek wat bij te veranderen.

Dus ik in class1 de volgende code gemaakt
C#:
1
2
3
public int lalal = 4;
public enum StatusEnum
{ status1=1, status2, status3, status4 }


En dan probeer ik vanaf de main class dit:
C#:
1
2
3
4
5
class1 klasje = new class1()
int lolol = klasje.lalal; //gaat prima
int lelel = (int)klasje.StatusEnum.status2; // Dit gaat helaas niet
//De Enum is namelijk niet te zien, ondanks dat die public is 
//en de public int 1 regel hoger wel accesible is


Nu snap ik dat je een enumerator niet naar een void kunt gooien omdat eigenlijk maar een soort snellkoppeling/geheugenstuentje is voor wat bepaalde waardes zijn. Maar is er geen manier om vanuit verschillende klassen de enum te bekijken? Anders zou waar ik hem voor wilde gebruiken nutteloos zijn.

Edit: even iets duidelijker gemaakt, let ook op de topic titel :)

Editje oftopic: wat me opvalt trouwens, welke codetag je ook ingooit de syntaxhighlightning kleur is altijd een soort van VisualBasic :P

[ Voor 11% gewijzigd door roy-t op 30-10-2007 22:09 ]

~ Mijn prog blog!


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:45

TeeDee

CQB 241

C#:
1
2
public enum StatusEnum
{ status1=1, status2, status3, status4 }

Volgens mij kan je status1 prima automagisch casten naar een int.
Maar omdat status2 geen int 'vervanger' heeft zal dit niet gaan.

Ff testen hoor...

Krijg je trouwens nog een fatsoenlijke foutmelding?

C#:
1
2
3
4
            Class1 classje = new Class1();
            int cijfer = classje.lelel;
            int statusmeuk = Convert.ToInt32(Class1.StatusMeuk.status2);
            Class1.StatusMeuk woei = Class1.StatusMeuk.status2;  

Dat zijn zo'n beetje de opties die ik kan bedenken.

[ Voor 37% gewijzigd door TeeDee op 30-10-2007 22:01 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wat dacht je van:
C#:
1
int lelel = (int)Class1.StatusEnum.status2;


:?
TeeDee schreef op dinsdag 30 oktober 2007 @ 21:53:
Maar omdat status2 geen int 'vervanger' heeft zal dit niet gaan.
Een enum is per definitie een 'doornummering' (enumeration) dus die telt gewoon 0*, 1, 2, 3, ... en dus hebben alle members van die enum wel degelijk een 'vervanger' ;)

* Tenzij je de enum members een andere (begin) waarde geeft.
The default underlying type of the enumeration elements is int. By default, the first enumerator has the value 0, and the value of each successive enumerator is increased by 1.

[ Voor 147% gewijzigd door RobIII op 30-10-2007 22:13 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:45

TeeDee

CQB 241

RobIII schreef op dinsdag 30 oktober 2007 @ 21:58:
* Tenzij je de enum members een andere (begin) waarde geeft.
Wat dus in dit geval zo is ;)

Heart..pumps blood.Has nothing to do with emotion! Bored


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
Pardon ik was (int) vergeten

maar nee ik krijg geen foutmelding, ik zal ook even de TS verduidelijken.

Ik krijg met intellisense niet eens de enum te zien vanuit de andere klasse.

Dus het probleem (zoals de titel aangeeft) is dat de enum, ondanks dat die public is, niet aanspreekbaar is vanuit een andere class, hoewel de public int 1 regel hoger dat wel is.

Als ik het dan toch maar hardnekkig typ krijg ik deze foutmelding
code:
1
Error   1   'StateVariables': cannot reference a type through an expression; try 'Isometric_RPG.StateManagers.StateManager.StateVariables' instead  C:\Documents and Settings\Roy Triesscheijn\Mijn documenten\Visual Studio 2005\Projects\XNA\Isometric_RPG\Isometric_RPG\Isometric_RPG\Game1.cs   99  40  Isometric_RPG

[ Voor 34% gewijzigd door roy-t op 30-10-2007 22:12 ]

~ Mijn prog blog!


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
therat10430 schreef op dinsdag 30 oktober 2007 @ 22:07:
Pardon ik was (int) vergeten

maar nee ik krijg geen foutmelding, ik zal ook even de TS verduidelijken.
De oplossing staat als eerste in mijn post :?
Of mis ik nu iets?

Je moet (int)class1 doen, i.p.v. (int)klasje

[ Voor 9% gewijzigd door RobIII op 30-10-2007 22:15 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:45

TeeDee

CQB 241

Zijn het andere namespaces?
Is de andere Namespace gereferenced als het uit een ander project komt?

Ik heb even gauw een testje gedaan:
Class1.cs
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using System.Collections.Generic;
using System.Text;

namespace EnumTester
{
    class Class1
    {
        public int lelel = 4;
        public enum StatusMeuk
        {
            status1=1,
            status2=2,
            status3=3,
            status4=4
        }
    }
}

En een simpel formpje (stond toevallig open ;)
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
namespace EnumTester
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            Class1 classje = new Class1();
            int cijfer = classje.lelel;
            int statusmeuk = Convert.ToInt32(Class1.StatusMeuk.status2);
            Class1.StatusMeuk woei = Class1.StatusMeuk.status2;         
            
        }
    }
}

Daar werkt de Intellisense gewoon prima hoor.

Edit: al dat werk, en dan krijgt RobIII de eer :'(

Heart..pumps blood.Has nothing to do with emotion! Bored


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
RobIII schreef op dinsdag 30 oktober 2007 @ 22:09:
[...]

De oplossing staat als eerste in mijn post :?
Of mis ik nu iets?
Pardon ik had het tweede gedeelte van je post niet goed gezien, en toen ik het zag wilde ik het eerst even testen.

Damn, ok dat werkt dus wel.. raar dat je een int wel vanuit een instantiering van een class (in dit geval klasje van class1) kunt aanspreken, maar een enum, wat eigenlijk gewoon een rijtje ints (of iets anders) is niet zo kan aanspreken.

top top, weer bedankt mensen. Zal proberen meteen iets aandachtiger te lezen RobIII ;)

EDIT: Ai nu gaat ineens iedereen posten :P, Nouja RobIII gaf al perfect het antwoord aan, ik las alleen over het laaste stapje waar Class1 ipv Klasje stond :)

[ Voor 11% gewijzigd door roy-t op 30-10-2007 22:15 ]

~ Mijn prog blog!


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
therat10430 schreef op dinsdag 30 oktober 2007 @ 22:14:
EDIT: Ai nu gaat ineens iedereen posten :P, Nouja RobIII gaf al perfect het antwoord aan, ik las alleen over het laaste stapje waar Class1 ipv Klasje stond :)
Daarom moet je bij het posten van code op GoT "real world" voorbeelden gebruiken en niet even uit de losse pols een voorbeeldje (met verwarrende en gelijkaardige namen) bedenken; dat gaat geheid mis ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
RobIII schreef op dinsdag 30 oktober 2007 @ 22:17:
[...]

Daarom moet je bij het posten van code op GoT "real world" voorbeelden gebruiken en niet even uit de losse pols een voorbeeldje (met verwarrende en gelijkaardige namen) bedenken; dat gaat geheid mis ;)
:') jij denkt dat mijn real world code minder verwarrend zou zijn? Nah geintje, bedankt voor de tip.

Ratje realizeerd zich ineens: Dus daaroom wordt ie blauw (intellisense is het niet geweldig :P)

~ Mijn prog blog!

Pagina: 1