Closed speedy901990 closed 11 years ago
Zajmę się tym wieczorem. Dzięki za informację, bo nie miałem pojęcia o istnieniu accessorów.
A jak wygląda sytuacja w przypadku np. pola typu Point. Chodzi mi konkretniej o 'set'. Set przyjmuje jedynie value. Czyli nie przypiszę w wywołaniu wartości Pos.x=wartosc; i Pos.y=wartosc;
Skoro w ciele klasy mam napisane coś takiego:
private Point pos;
public Point Pos
{
get
{
return this.pos;
}
set
{
pos = value;
}
}
To następnie w wywołaniu mam użyć?
Pos = new Point(x,y);
A czekaj dobra nie konca zrozumialem twoj problem ;) Wydaje mi sie ze tak powinno byc tak jak napisales tzn nazwaObiektu.Pos = new Point(x,y); Zignoruj poprzednia odpowiedz :P
W dniu 26 lipca 2013 22:40 użytkownik Sławomir Kwaśniewski < slk1871@gmail.com> napisał:
Mylisz 2 pojecia. Accesory sa tylko do ustawienia wartosci pól w klasie. A konstruktor jest to utworzenia obiektu i nadanie wartosci pól w momencie utworzenia. Innymi slowy Accesory tworzysz do wypelnienia X i Y a konstruktor do utworzenia obiektu. private int x; public int X {get; set;}
i tak samo dla Y
W dniu 26 lipca 2013 20:00 użytkownik grzesiekmos < notifications@github.com> napisał:
A jak wygląda sytuacja w przypadku np. pola typu Point. Chodzi mi
konkretniej o 'set'. Set przyjmuje jedynie value. Czyli nie przypiszę w wywołaniu wartości Pos.x=wartosc; i Pos.y=wartosc;
Skoro w ciele klasy mam napisane coś takiego:
private Point pos; public Point Pos { get { return this.pos; } set { pos = value; } }
To następnie w wywołaniu mam użyć? Pos = new Point(x,y);
Reply to this email directly or view it on GitHubhttps://github.com/speedy901990/KinectMiniGames/issues/15#issuecomment-21637551 .
Sprawdzone i działa w 100%:
Point p;
Point P
{
get { return this.p; }
set { this.p = value; }
}
// ...
// usage
P = new Point(3, 4);
label1.Text = P.ToString();
A w przypadku pola color?
Ustawiony przeze mnie wcześniej setter wygląda następująco: Przyjmuje inta z zakresu 1-3, i w zależności od tego co się wylosuje to nadawany jest jeden z trzech kolorów. Szkoda, że tych akcesorów z C# nie można sparametryzować (chyba, że jest jakiś sposób o którym nie wiem)
private void setColor(int colourParam)
{
switch (colourParam)
{
//Red
case 1:
color = Color.FromArgb(255, 255, 0, 0);
break;
//Green
case 2:
color = Color.FromArgb(255, 0, 255, 0);
break;
//Yellow
case 3:
color = Color.FromArgb(255, 255, 255, 0);
break;
default:
color = Color.FromArgb(255, 255, 0, 0);
break;
}
}
Niestety nie da się ich sparametryzować. A dlaczego nie możesz zrobić zwykłego get; set; a potem przypisywać im po prostu COLORr zamiast INT ? To nie powinno mieć znaczenia bo i tak jakoś tego INTa musisz wcześniej wybrać do przypisania. Jeśli będziesz potrzebował jakieś operacje na INTach gdzieś robić, to zawsze będziesz mógł użyć np 'KeyValuePair<>' żeby powiązać z INTa z COLOR. Może Cię przeraża to Color.FromArgb(...) i chciałeś to ukryć. Oczywiście to wygląda bardzo brzydko dlatego polecam wykorzystać 'System.Windows.Media.Colors' przez co kod wygląda bardziej przyjaźnie.
Color col = Colors.Red;
Chodzi mi o plik Apples.cs Widać Grzesiek, że pisałeś w C++ i tak też podszedłeś do 'getteóws' i 'setterów'. C# bardzo upraszcza sprawę umożliwiając tworzenie 'accessorów' za pomocą prostej składni. Szczegóły pod TYM LINKIEM. Dzięki temu kod jest też bardziej przejrzysty. Przerób ten kod wg tego standardu.