Autor |
Beitrag |
OldCat
![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 77
Win 10 Pro x64
C# (VS 2019), (VS 2022)
|
Verfasst: Sa 06.11.21 13:27
Liebe Gemeinschaft,
heute frage ich mich, ob Werte für Felder einer Klasse lieber direkt definiert werden sollten, oder ob es doch besser ist, die Werte der Felder erst im Konstruktor zu definieren?
Habe hier mal jene Klasse, um die es geht, aus meinem tutorialbasierten Projekt gepostet. Achtung: Folgendes wird in diesem Code noch nicht angewendet: Arrays, Lists, Iterationen/Loops.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86:
| namespace ItemShop { class Shop { private string GameTitle; private string Description; private decimal OrderTotal; public Shop() { System.Console.SetWindowSize(width: 75, height: 25); GameTitle = "=== Item Shop ==="; Description = "Welcome to our shop!\nYou can chose between three different items:"; OrderTotal = 0; }
public void Run() { DisplayIntro(); System.Console.WriteLine(); SellItem("\"Chopped Sword\"", 19.99M); SellItem("\"Short Sword\"", 99.99M); SellItem("\"Long Sword\"", 199.99M);
DisplayOutro(); }
private void DisplayIntro() { System.Console.Title = GameTitle; System.Console.WriteLine("================="); System.Console.WriteLine(GameTitle); System.Console.WriteLine("=================\n"); System.Console.WriteLine(Description); }
private void SellItem(string itemName, decimal cost) { System.Console.OutputEncoding = System.Text.Encoding.UTF8; System.Console.WriteLine($"Would you like to buy a(n) {itemName} for {cost:C2}? (y/n)"); string response = System.Console.ReadLine().Trim().ToLower(); if (response.StartsWith('y')) { System.Console.WriteLine("How many do you like?"); string numberResponse = System.Console.ReadLine(); try { int quantity = System.Convert.ToInt32(numberResponse);
decimal itemTotal = cost * quantity; System.Console.WriteLine($"You bought {quantity}x of {itemName} for {itemTotal:C2}."); } catch (System.FormatException) { System.Console.WriteLine("This was invalid. Try to type in a number."); SellItem(itemName, cost); } catch (System.OverflowException) { System.Console.WriteLine("This was a too high or too low number. Try to type in a more realistic one..."); SellItem(itemName, cost); } } else { System.Console.WriteLine($"Oh well, you didn't buy a(n) {itemName}."); } }
private void DisplayOrderTotal() { }
private void DisplayOutro() { System.Console.WriteLine("Thanks for shopping."); System.Console.WriteLine("\nPress any key to exit..."); System.Console.ReadKey(); } } } |
Liebe Grüße
OldCat
Moderiert von Th69: Topic aus Sonstiges (.NET) verschoben am Sa 06.11.2021 um 17:20
|
|
Ralf Jansen
![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 4701
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Sa 06.11.21 13:57
Vorweg macht oft keinen Unterschied. Technisch ist es am Ende das gleiche.
Tendenziell würde ich es bei Literalen/Konstanten nicht so machen wie du sondern eher direkt am Feld machen und nicht im Konstruktor.
Das hat das potential bei später möglichen Änderungen am längsten zu überleben.
Je nach Sinn der Felder solltest du dir eher überlegen ob es nicht eher Konstanten (const) sind oder zumindest readonly Felder. Für mich sehen zumindest GameTitle/Description nicht nach was aus was sich zur Laufzeit noch mal ändern sollte.
Für diesen Beitrag haben gedankt: OldCat
|
|
OldCat ![Threadstarter Threadstarter](./graphics/viewtopic/threadstarter.png)
![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 77
Win 10 Pro x64
C# (VS 2019), (VS 2022)
|
Verfasst: Sa 06.11.21 14:05
Ah, ich danke Dir sehr für Deine Hilfe.
Du hast mir tatsächlich alle Fragen zum Thema beantworten können.
Anfangs hatte ich die Werte tatsächllich direkt am Feld definiert. Ja, die Werte der Felder werden sich zur Laufzeit in der Tat nicht mehr ändern. Werde mal nach readonly und Konstanten schauen (hab diesbezüglich noch nicht den Plan). Werde es dann aber so machen, dass die Felder readonly und/oder Konstanten sein werden.
Danke und liebe Grüße
OldCat ![:beer:](images/smiles/icon_beerchug.gif)
|
|
Ralf Jansen
![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 4701
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Sa 06.11.21 14:13
Zitat: | Werde es dann aber so machen, dass die Felder readonly und/oder Konstanten sein werden |
Ich verrate mal es wird "oder" sein ![;)](images/smiles/icon_wink.gif)
|
|
OldCat ![Threadstarter Threadstarter](./graphics/viewtopic/threadstarter.png)
![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 77
Win 10 Pro x64
C# (VS 2019), (VS 2022)
|
Verfasst: Sa 06.11.21 14:20
|
|
Ralf Jansen
![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 4701
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Sa 06.11.21 14:50
Ich würde dir noch empfehlen die Sichtbarkeiten dranzuschreiben.
Ja es gibt da defaults mit denen man arbeitet wenn man nichts hinschreibt aber ist dir bewusst das jetzt deine Shop Klasse internal ist und deine beiden Konstanten private?
Ich programmiere jetzt seit fast 40 Jahren und habe da selbst keinerlei Sicherheit wie bei den verschiedenen Kombinationsmöglichkeiten die Sichtbarkeit am Ende jetzt genau ist. Darum besser gleich hinschreiben.
Macht für dich und was du im Moment tust sicher keinen großen Unterschied. Sich das anzugewöhnen explizite Sichtbarkeiten zu benutzen hilft dir aber später und tut jetzt nicht weh.
Für diesen Beitrag haben gedankt: OldCat
|
|
OldCat ![Threadstarter Threadstarter](./graphics/viewtopic/threadstarter.png)
![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![OldCat hat insgesamt 90.9% On-Topic und 9.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 77
Win 10 Pro x64
C# (VS 2019), (VS 2022)
|
Verfasst: Sa 06.11.21 15:30
Ralf Jansen hat folgendes geschrieben : | Ich würde dir noch empfehlen die Sichtbarkeiten dranzuschreiben. |
Meinst Du so?
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| namespace ItemShop { internal class Shop { private const string GameTitle = "=== Item Shop ==="; private const string Description = "Welcome to our shop!\nYou can chose between three different items:"; private decimal OrderTotal = 0.0M; }
{ ... } } |
Ja, das die Klasse jetzt nur noch im selben Projekt anwendbar ist, und die Konstanten nicht mehr außerhalb dieser Klasse wirksam sind, war mir tatsächlich nicht klar ... danke für den Tipp!
Ja, in der Tat ist es hier in diesem Projekt nicht weiter wild, dass dem so ist. Es bsteht nur aus der Shop-Klasse und der Program-Klasse mit Main()...
40 Jahre programmieren ist ne Hausnummer ...! Bin selbst 41 und habe erst vor ein paar Monaten langsam angefangen ... ^_^ Mal schauen, wohin die Reise mich führt... ![:lupe:](images/smiles/icon_lupe.gif)
Zuletzt bearbeitet von OldCat am So 07.11.21 11:42, insgesamt 1-mal bearbeitet
|
|
Ralf Jansen
![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Ralf Jansen hat insgesamt 92.0% On-Topic und 8.0% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 4701
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Sa 06.11.21 16:08
So hab ich mir das vorgestellt ja.
|
|
Palladin007
![Palladin007 hat insgesamt 89.9% On-Topic und 10.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Palladin007 hat insgesamt 89.9% On-Topic und 10.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Palladin007 hat insgesamt 89.9% On-Topic und 10.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Palladin007 hat insgesamt 89.9% On-Topic und 10.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Palladin007 hat insgesamt 89.9% On-Topic und 10.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Palladin007 hat insgesamt 89.9% On-Topic und 10.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Palladin007 hat insgesamt 89.9% On-Topic und 10.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Sa 06.11.21 18:34
Ich würde auch immer internal bzw. private gegenüber public bevorzugen - außer man braucht explizit public.
Hauptsächlich, um direkt zu steuern, wo man was "sehen" kann, welche Klasse bzw. was davon genutzt werden darf und so weiter.
Bei mehreren Projekten (bzw. ein Projekt aufgeteilt) erreichst Du auf diese Weise eine Abschottung der einzelnen Komponenten, die eine gewisse Sicherheit bieten kann.
Für diesen Beitrag haben gedankt: OldCat
|
|