Ανοίγω αυτό το νήμα, ως αντίστοιχο του Ερωτήσεις για C για να έχουμε συγκεντρωμένα θέματα που αφορούν την C#.
Προέκυψε λοιπόν ανάγκη να μάθω C#, οπότε ξεκίνησα προχτές. Προς το παρόν αποσπασματικά από κάποια online tutorials για να πάρω μια γενική εικόνα, πριν καθίσω να διαβάσω κανονικό βιβλίο.
Φτιάχνω ένα απλό πρόγραμμα, προκειμένου να εξοικειωθώ με τη γλώσσα αρχικά σε κονσόλα, και ήδη έχω μαζέψει πολλές ερωτήσεις για τους έμπειρους στη γλώσσα.
Το πρόγραμμα ουσιαστικά υλοποιεί μια κλάση GreekName, για στοιχειώδη διαχείριση ελληνικών ονομάτων στην κονσόλα των Windows (CultureInfo.Name == "el-GR" ή/και "el").
Ρωτάει κι αποθηκεύει το όνομα ως string θεωρώντας το ονομαστική πτώση, και κατόπιν το αναπαράγει σε κλητική πτώση (διενεργώντας κάποια validation checks κατά την είσοδο).
Π.χ....
>
Το πλήρες όνομά σας; α
*** τα ονόματα πρέπει να περιέχουν τουλάχιστον 2 γράμματα
Το πλήρες όνομά σας; ΑλΈΚο2 ΑΘΑΝΑΣΙΟΥ
*** επιτρέπονται μόνο γράμματα
Το πλήρες όνομά σας; αΛΈκοΣ ΠΑπαΓΙάΝΝΗς
Γειά σου Αλέκο Παπαγιάννη.
Βέβαια το υλοποιώ πολύπλοκα, για να εξασκώ τα διάφορα που διαβάζω (π.χ. overloaded constructors/methods, public/private properties αυτόματες και μη, callback functions μέσω delegates, κλπ) κι έχω μαζέψει ήδη αρκετές ερωτήσεις αλλά θα ξεκινήσω με πολύ απλές για αρχή
Για αρχή, υπάρχει κάποια ουσιαστική διαφορά αν στην υλοποίηση των properties χρησιμοποιούμε ή όχι το this.
Για παράδειγμα, έχω ορίσει την property Text ως εξής...
>
public class GreekName
{
// private fields
private CultureInfo _ci; // CultureInfo
private string _text; // the actual text
private string _fname, _lname;
/** @brief The simplest constructor of the class. */
public GreekName()
{
this.Text = string.Empty;
_ci = new CultureInfo("el-GR", false);
}
/** @brief Overload constructor, accepting text for the name. */
public GreekName( string text )
{
this.Text = string.IsNullOrEmpty(text) ? string.Empty : text.Trim();
_ci = new CultureInfo("el-GR", false);
}
/** @brief Overloaded constructor, accepting text and culture. */
public GreekName( string text, string cultureName )
{
this.Text = new GreekName(text).Text;
if ( string.IsNullOrEmpty(cultureName)
|| ("el-GR" != cultureName && "el" != cultureName )
){
_ci = new CultureInfo("el-GR", false);
}
else {
_ci = new CultureInfo(cultureName, false);
}
}
...
/** @brief Property for getting/setting the name's text string. */
public string Text
{
get { return this._text; }
set { this._text = value.Trim(); }
}
...
Κερδίζω/χάνω τίποτα αν την ορίσω χωρίς αναφορά στο this? ...
>
/** @brief Property for getting/setting the name's text string. */
public string Text
{
get { return _text; }
set { _text = value.Trim(); }
}
Επίσης, είναι καλή πρακτική να την χρησιμοποιώ στους constructors ή είναι καλύτερα να χρησιμοποιώ απευθείας το text filed; Κι αν ναι, με ή χωρίς this μπροστά;
EDIT:
Έβαλα και του υπόλοιπους constructors για να υπάρχει πιο σφαιρική εικόνα της υλοποίησής του (να μου πείτε αν έχω κάνει και καμια μαμακία).
Το νόημα του encapsulation δεν είναι να έχεις set/get για κάθε field. Αν ήταν έτσι προφανώς και θα οριζες τα fields σου public και θα ξεμπερδευες.
Το βασικό που πρέπει να καταλάβεις είναι πως θα
Πες οτι έχεις μια class A με μια static method Foo που έχει optional parameter int bar = 42 στην assembly a.dll.
Εσύ τώρα γράφεις κώδικα σε μια άλλη assembly b.exe (έχοντας κάνει reference την a.d
Ερώτηση
migf1 541
Ανοίγω αυτό το νήμα, ως αντίστοιχο του Ερωτήσεις για C για να έχουμε συγκεντρωμένα θέματα που αφορούν την C#.
Προέκυψε λοιπόν ανάγκη να μάθω C#, οπότε ξεκίνησα προχτές. Προς το παρόν αποσπασματικά από κάποια online tutorials για να πάρω μια γενική εικόνα, πριν καθίσω να διαβάσω κανονικό βιβλίο.
Φτιάχνω ένα απλό πρόγραμμα, προκειμένου να εξοικειωθώ με τη γλώσσα αρχικά σε κονσόλα, και ήδη έχω μαζέψει πολλές ερωτήσεις για τους έμπειρους στη γλώσσα.
Το πρόγραμμα ουσιαστικά υλοποιεί μια κλάση GreekName, για στοιχειώδη διαχείριση ελληνικών ονομάτων στην κονσόλα των Windows (CultureInfo.Name == "el-GR" ή/και "el").
Ρωτάει κι αποθηκεύει το όνομα ως string θεωρώντας το ονομαστική πτώση, και κατόπιν το αναπαράγει σε κλητική πτώση (διενεργώντας κάποια validation checks κατά την είσοδο).
Π.χ....
Βέβαια το υλοποιώ πολύπλοκα, για να εξασκώ τα διάφορα που διαβάζω (π.χ. overloaded constructors/methods, public/private properties αυτόματες και μη, callback functions μέσω delegates, κλπ) κι έχω μαζέψει ήδη αρκετές ερωτήσεις αλλά θα ξεκινήσω με πολύ απλές για αρχή
Για αρχή, υπάρχει κάποια ουσιαστική διαφορά αν στην υλοποίηση των properties χρησιμοποιούμε ή όχι το this.
Για παράδειγμα, έχω ορίσει την property Text ως εξής...
Κερδίζω/χάνω τίποτα αν την ορίσω χωρίς αναφορά στο this? ...
Επίσης, είναι καλή πρακτική να την χρησιμοποιώ στους constructors ή είναι καλύτερα να χρησιμοποιώ απευθείας το text filed; Κι αν ναι, με ή χωρίς this μπροστά;
EDIT:
Έβαλα και του υπόλοιπους constructors για να υπάρχει πιο σφαιρική εικόνα της υλοποίησής του (να μου πείτε αν έχω κάνει και καμια μαμακία).
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
Συχνή συμμετοχή στην ερώτηση
15
6
6
5
Δημοφιλείς Ημέρες
15 Νοέ
19
14 Νοέ
14
17 Άυγ
10
16 Νοέ
2
Συχνή συμμετοχή στην ερώτηση
migf1 15 αναρτήσεις
moukoublen 6 αναρτήσεις
defacer 6 αναρτήσεις
iceblade 5 αναρτήσεις
Δημοφιλείς Ημέρες
15 Νοέ 2012
19 αναρτήσεις
14 Νοέ 2012
14 αναρτήσεις
17 Άυγ 2016
10 αναρτήσεις
16 Νοέ 2012
2 αναρτήσεις
Δημοφιλή Μηνύματα
παπι
Το ξερω οτι εισαι ξεροκεφαλος σε μερικα θεματα, αλλα θα στο πω. Βαλε vs ή κατι που να εχει intelliSense, αλλιως απλα παρατα τα.
dios231
Το νόημα του encapsulation δεν είναι να έχεις set/get για κάθε field. Αν ήταν έτσι προφανώς και θα οριζες τα fields σου public και θα ξεμπερδευες. Το βασικό που πρέπει να καταλάβεις είναι πως θα
defacer
Πες οτι έχεις μια class A με μια static method Foo που έχει optional parameter int bar = 42 στην assembly a.dll. Εσύ τώρα γράφεις κώδικα σε μια άλλη assembly b.exe (έχοντας κάνει reference την a.d
Δημοσιευμένες Εικόνες
51 απαντήσεις σε αυτή την ερώτηση
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Εγγραφείτε για έναν νέο λογαριασμόΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα