Typ wyliczeniowy a klasy/struktury

0

Zastawnawiam sie, czy mozna uzyc klasy jako typu uzywanego w typie wyliczeniowym. Bylo by to wygodne.

Typ wyliczeniowy:

Public class Ustawienia
{
      protected int liczba1;
      protected int liczba2;
      protected int liczba3;
      protected string napis;
}

enum ProcesState : Ustawienia
        {
               ......
        }

pzdr

0

nie mozna. podstawa enuma musi byc integerem. mozesz co najwyzej wybrac - jakim - signed/unsigned, 16/32/64etc bit
http://msdn.microsoft.com/en-us/library/sbbt4032(VS.71).aspx

0
quetzalcoatl napisał(a)

nie mozna. podstawa enuma musi byc integerem. mozesz co najwyzej wybrac - jakim - signed/unsigned, 16/32/64etc bit
http://msdn.microsoft.com/en-us/library/sbbt4032(VS.71).aspx

Szkoda ;)

0

Zawsze można to rozwiązać inaczej, na pewno jest wiele sposobów, w zależności od tego, co chce się osiągnąć.

0

Domyslam sie, ale ten pomysł wydawał by sie przejzysty dla programu.
Chcialem wprowadzic zmienne typu Ustawienia do przechowywania ustawien dla roznych stanow programu.

Kazdy stan opisuja np 4 zmienne:

    int liczba1;
    int liczba2;
    int liczba3;
    string napis;

i np, dla stanu 1:

liczba1=500;
liczba2=100;
liczba3=0;
napis="oczekiwanie"

itp..

enum ProcesState : Ustawienia
{
           StateOczekiwanie=..
           StateKopiowanie=..
}

i łatwo można by było

public Ustawienia StanProgramu;
StanProgramu=ProcesState.StateOczekiwanie;

itp ;)
taki fikuśny przykład ;)

0

Dalej możesz to zrealizować w oparciu o enum i jakąś klasę Settings, np tak:

enum ProcessState
{
           StateOczekiwanie
           StateKopiowanie
}
public class Settings
{
           public string s1 { get; private set; }
           public string s2 { get; private set; }
           public int i1 { get; private set; }

           public Settings(enum ProcessState ps) 
           {
                      switch(ps) : 
                      case ProcessState.StateOczekiwanie:
                                 s1 = "...";
                                 s2 = "...";
                                 i1 = ...;
                                 break;
                      case ProcessState.StateKopiowanie:
                                 s1 = "...";
                                 s2 = "...";
                                 i1 = ...;
                                 break;
                                 ...
           }
}

Podając konstruktorowi wartość enuma otrzymasz wypełnioną klasę. Proste i dość przyzwoite.

0

z zalozenia nie chcialem na podstawie enum tworzyc obiektow klasy przez konstruktor, tylko wartosci obiektu klasy ustawienia w enumie, przypisywac do zmiennej StanProgramu w czasie trwania programu.

0

No to inaczej:

enum TypStanu { Oczekiwanie, Kopiowanie }

[...]

class Test
{
  TypStanu stan;
  public TypStanu Stan
  {
    get
    {
      return stan;
    }
    set
    {
      stan = value;
      Ustaw();
    }
  }

  private void Ustaw()
  {
    switch (stan)
    {
      case TypStanu.Oczekiwanie:
        [...]
        break;
      case TypStanu.Kopiowanie:
        [...]
        break;
    }
  }
}
Test test = new Test();
test.Stan = TypStanu.Oczekiwanie;
0
Szczawik napisał(a)

No to inaczej:

enum TypStanu { Oczekiwanie, Kopiowanie }

[...]

class Test
{
  TypStanu stan;
  public TypStanu Stan
  {
    get
    {
      return stan;
    }
    set
    {
      stan = value;
      Ustaw();
    }
  }

  private void Ustaw()
  {
    switch (stan)
    {
      case TypStanu.Oczekiwanie:
        [...]
        break;
      case TypStanu.Kopiowanie:
        [...]
        break;
    }
  }
}
Test test = new Test();
test.Stan = TypStanu.Oczekiwanie;

Ciekawe rozwiązanie :) dzięki za punkt widzenia ;)

0

Może coś takiego:

public class ProcesState
{
    private int liczba;
    public int Liczba { get { return liczba; } }

    private string napis;
    public string Napis { get { return napis; } }

    private ProcesState(int liczba, string napis)
    {
        this.liczba = liczba;
        this.napis = napis;
    }

    private static ProcesState stateOczekiwanie = new ProcesState(0, "Oczekiwanie");
    public static ProcesState StateOczekiwanie { get { return stateOczekiwanie; } }

    private static ProcesState stateKopiowanie = new ProcesState(1, "Kopiowanie");
    public static ProcesState StateKopiowanie { get { return stateKopiowanie; } }
}
//...
ProcesState stanProgramu;
stanProgramu = ProcesState.StateOczekiwanie;
0
adf88 napisał(a)

Może coś takiego:

public class ProcesState
{
    private int liczba;
    public int Liczba { get { return liczba; } }

    private string napis;
    public string Napis { get { return napis; } }

    private ProcesState(int liczba, string napis)
    {
        this.liczba = liczba;
        this.napis = napis;
    }


    private static ProcesState stateOczekiwanie = new ProcesState(0, "Oczekiwanie");
    public static ProcesState StateOczekiwanie { get { return stateOczekiwanie; } }

    private static ProcesState stateKopiowanie = new ProcesState(1, "Kopiowanie");
    public static ProcesState StateKopiowanie { get { return stateKopiowanie; } }
}
//...
ProcesState stanProgramu;
stanProgramu = ProcesState.StateOczekiwanie;

zdaje mi się ze jeszcze ciekawsze rozwiązanie, wyklucza instrukcje warunkowe ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1