Diskuze: Zamezit změnit property jinde než ve vlastnící třídě
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
public class Kolo
{
public double Obvod { get; private set; }
public void pocitejObvod(double polomer)
{
this.Obvod = polomer*2* Math.Pi;
}
}
nebo
public class Kolo
{
private double obvod;
public double Obvod
{
get{ return obvod;}
}
public void pocitejObvod(double polomer)
{
obvod = polomer*2* Math.Pi;
}
}
Mnho, tak díky... Jsem to zkoušel s tou private, ale problém je že Obvod
je implementací rozhraní - takže to brblalo..
V definici rozhraní se musí odstranit set;
Což je mi zase záhadou, že to pak jde setnout..
pro úplnost finální funkční kód:
public class Kolo:ITvary
{
public double Obvod { get; private set; }
public void pocitejObvod(double polomer)
{
this.Obvod = polomer*2* Math.Pi;
}
}
interface ITvary
{
pocitejObvod(double polomer);
double Obvod(get;);
}
Tohle určitě funkční není každopádně aplikace poněkud divná, protože první vypočítáš
a pak až si někde jinde musíš tu hodnotu vyzvednout. Kdyby to bylo v
konstruktoru tak jo, nebo kdyby to přímo vracelo hodnotu tak taky, ale tohle
mi přijde trošku divné.
Dále interface by se měl pojmenovávat v jednotném čísle (to platí i o třídě) takže by to měl být ITvar. I když já bych si o rozhraní ITvar představoval něco jiného.
Podle další konvence z C# by se metoda měla pojmenovávat pomocí CamelCase, takže tvoje metoda by měla být PocitejObvod(double polomer).
K těm chybám: metoda v rozhraní nemá návratový typ; takhle se vlastnost nedeklaruje.
interface ITvar
{
void pocitejObvod(double polomer);
double Obvod { get; }
}
a třída třeba takto:
public class Kolo : ITvar
{
private double obvod;
public double Obvod
{
get { return obvod; }
}
public void pocitejObvod(double polomer)
{
obvod = polomer * 2 * Math.PI;
}
}
Jo, já vím spoustu chyb- psal jsem to narychlo,jako demonstrační
kód.
Ve skutečnosti to počítám u věcí, u kterých to smysl dává...
Nevím, jestli jsi tu nefunkčnost myslel k tomu mému paskvilkódu, nebo k tomu
jak se to vyřešilo s tou private set...
V tom druhým případě mi to dokonce Resharper, když sem se to snažil
udělat tak jak ukazuješ (property with back field)
( a skutečně to běží)
Rozhodopádně díky za pomoc
Jo, já vím spoustu chyb- psal jsem to narychlo,jako demonstrační
kód.
Ve skutečnosti to počítám u věcí, u kterých to smysl dává...
Nevím, jestli jsi tu nefunkčnost myslel k tomu mému paskvilkódu, nebo k tomu
jak se to vyřešilo s tou private set...
V tom druhým případě mi to dokonce Resharper, když sem se to snažil
udělat tak jak ukazuješ (property with back field)
( a skutečně to běží)
Rozhodopádně díky za pomoc
Zobrazeno 9 zpráv z 9.