Permalänk
Medlem

C# hjälp

Hej, då jag inte har någon lärare mer än distans-lärare som är väldigt svårt att få kontakt med så tänkte jag ta upp min fråga här och se ifall någon är villig och hjälpa mig

Detta hade jag tänkte svara på följande viss.

1. Innebörden är att Statisk metod bestämmer på vilket sätt som t.ex. metoden ReadLine() är medlem i en
klassen Console.

2. Ett exempel på detta är klassen Console som innehåller metoden ReadLine(). För att anropa metoden använder man punktnotationen av klassen följt av metoden: alltså så här --> Console.ReadLine();

Jag är helt ny till C#, så mina kunskaper inom C# är inte så bred.

Permalänk
Medlem

Din kursbok skall beskriva detta, har du öpnnat och läst den? Annars kan du få lite lektyr från MSDN static (C# Reference) men tipset är starkt att lösa din kursbok alternativt köpa in en för där beskriver de väldigt pedagogiskt, vilket inte MSDN gör

Visa signatur

CPU: i7 6700k + Fractal Design S24 GPU: ASUS GeForce GTX 1070 8GB DUAL OC RAM: Kingston 16GB 2133MHz CL13 MB: MSI GAMING M7 PSU: EVGA Supernova G2 850W, 80+ Gold SSD: Samsung SM951 256GB M.2 NVMe + Samsung EVO 850 250GB M.2 Chassi: Fractal Design S Skrämar: Acer XB270HU + 2x Dell U2412M
NAS: Synology DS415+ (4x WD RED 6 TB) Console: Xbox One

Permalänk
Medlem
Skrivet av Tino:

Din kursbok skall beskriva detta, har du öpnnat och läst den? Annars kan du få lite lektyr från MSDN static (C# Reference) men tipset är starkt att lösa din kursbok alternativt köpa in en för där beskriver de väldigt pedagogiskt, vilket inte MSDN gör

Japp, jag har kollat i kurs boken. Men förklaringen är dessvärre inte tillräckligt tydlig. Annars hade jag inte ställt frågan här. Men tack för tipset ändå.

Permalänk
Inaktiv

Att en klass är statisk innebär att du inte behöver skapa ett objekt av den typen.

För en icke statisk klass skulle du ju få göra något i stil med:
Math myMath = new Math();
int value = myMath.sin(90);

Har du en statisk klass kan du inte skapa objekt med den, utan all kod kallas direkt med klassnamnet likt:
var value = Math.sin(90)

eller
Console.WriteLine(value);

För att få reda på detta kunde du även följt forumets regler och sökt på frågan eller helt enkelt googlat för en mycket mer utförlig och bättre förklaring
https://msdn.microsoft.com/en-us/library/79b3xss3.aspx

Permalänk
Medlem

Den viktigaste poängen med statiska metoder är vad de tillhör, klassen eller instantierade objekt av klassen.

Tänk dig att du har en Bil klass. Du skapar upp en röd Bil och säger åt den att köra. Köra är något som den röda bilen gör, så det är en instans-metod.

Bil rödBil = new Bil("röd");
rödBil.Kör();

Du säger sedan åt Bil klassen att skapa en kopia av den röda bilen. Detta är inget själva bilen gör utan funktionalitet som själva klassen har, alltså en statisk metod.

Bil bilKopia = Bil.Copy(rödBil);

En statisk klass är en klass som bara har statiska metoder, som t ex Math klassen. Du kan inte skapa upp Math objekt, och även om du kunde det skulle de inte kunna göra någonting, alla metoder i Math klassen är statiska och hör därmed till klassen, inte objekt instantierade från klassen.

Visa signatur

Fractal Design Define R5 | MSI Z97-GD65 Gaming | MSI Geforce GTX 970 Gaming 4G | Intel i5 4690k | Cooler Master Hyper 212 EVO | EVGA Supernova G2 750W | 2x8GB Corsair Vengeance Low Profile DDR3 1600Mhz | Samsung 850 EVO | Seagate 1TB SATA3.5

Permalänk
Medlem
Skrivet av stanikz:

Hej, då jag inte har någon lärare mer än distans-lärare som är väldigt svårt att få kontakt med så tänkte jag ta upp min fråga här och se ifall någon är villig och hjälpa mig

Detta hade jag tänkte svara på följande viss.

1. Innebörden är att Statisk metod bestämmer på vilket sätt som t.ex. metoden ReadLine() är medlem i en
klassen Console.

2. Ett exempel på detta är klassen Console som innehåller metoden ReadLine(). För att anropa metoden använder man punktnotationen av klassen följt av metoden: alltså så här --> Console.ReadLine();

Jag är helt ny till C#, så mina kunskaper inom C# är inte så bred.

De andra har redan visat hur man ropar på en statisk metod.

Var dock försiktig med vad du väljer att göra med statiska metoder. Tänk på att interface inte kan användas med statiska metoder och de går inte heller i .net att testa om du inte köper ett testverktyg, de som är gratis klarar inte statiska metoder då lösningen bygger på refelction. Vidare så är trådsäkerhet ett problem.
Ovanstående gör att skalbarhet blir ett problem samt låg koppling / hög integritet, utbytbarhet, utbyggnad, samt test. Det kan också skapa buggar, så som om du exponerar en statisk variabel till andra projekt (om variabelns värde ändras så kan de andra projekten hålla kvar föregående variabel).

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Medlem
Skrivet av IceDread:

De andra har redan visat hur man ropar på en statisk metod.

Var dock försiktig med vad du väljer att göra med statiska metoder. Tänk på att interface inte kan användas med statiska metoder och de går inte heller i .net att testa om du inte köper ett testverktyg, de som är gratis klarar inte statiska metoder då lösningen bygger på refelction. Vidare så är trådsäkerhet ett problem.
Ovanstående gör att skalbarhet blir ett problem samt låg koppling / hög integritet, utbytbarhet, utbyggnad, samt test. Det kan också skapa buggar, så som om du exponerar en statisk variabel till andra projekt (om variabelns värde ändras så kan de andra projekten hålla kvar föregående variabel).

Lite svårt att hålla med dig här.

Man kan inte definiera statiska metoder i interface, men det är ju ren semantik. Ett interface beskriver hur ett objekt kan kommuniceras med, statiska metoder står utanför objekten. Gratis testverktyg har inga problem med statiska metoder, inte NUnit sen 2.5 iaf.

Resten av dina argument handlar bara om hur folk skriver metoder och har inget med huruvida de är statiska att göra. Skriver man metoder med state som refererar fram och tillbaka okontrollerat så får man buggar och problem med skalbarhet, oavsett om de är statiska eller instantierade.

Helt klart ska man vara nogrann med när man använder statiska metoder så man i den utsträckning som är logisk kör på instantierade metoder (eftersom de oftast är tydligare), men man ska inte akta sig för statiska metoder som om det är något direkt dåligt med dem. I situationer där de passar är de perfekta för jobbet de är till för.

Visa signatur

Fractal Design Define R5 | MSI Z97-GD65 Gaming | MSI Geforce GTX 970 Gaming 4G | Intel i5 4690k | Cooler Master Hyper 212 EVO | EVGA Supernova G2 750W | 2x8GB Corsair Vengeance Low Profile DDR3 1600Mhz | Samsung 850 EVO | Seagate 1TB SATA3.5

Permalänk
Medlem
Skrivet av Tobberoth:

Lite svårt att hålla med dig här.

Man kan inte definiera statiska metoder i interface, men det är ju ren semantik. Ett interface beskriver hur ett objekt kan kommuniceras med, statiska metoder står utanför objekten. Gratis testverktyg har inga problem med statiska metoder, inte NUnit sen 2.5 iaf.

Resten av dina argument handlar bara om hur folk skriver metoder och har inget med huruvida de är statiska att göra. Skriver man metoder med state som refererar fram och tillbaka okontrollerat så får man buggar och problem med skalbarhet, oavsett om de är statiska eller instantierade.

Helt klart ska man vara nogrann med när man använder statiska metoder så man i den utsträckning som är logisk kör på instantierade metoder (eftersom de oftast är tydligare), men man ska inte akta sig för statiska metoder som om det är något direkt dåligt med dem. I situationer där de passar är de perfekta för jobbet de är till för.

Låt säga att du ska använda en beräkningsmotor eller flera beroende på situation. Din klass tar i konstruktion därför emot en av dessa beräkningsmoduler. Eftersom du inte vill låsa dig till en av dem så tar man i stället emot ett interface så att du oavsett vilken modul du väljer att använda kan köra på. Det finns oändligt med situationen där låg koppling och hög integritet är smidigt och viktigt och inte kostar någon tid att koda för en van person.
Har du här byggt en satisk beräkningsmotor så måste du först wrappa den för att kunna använda den i en skalbar modulär miljö.

Du glömde, eller valde, att inte kommentera på trådsäkerhet samt att exponera statiska variabler.

Statiska metoder har däremot, som jag vid andra tillfällen också sagt, ett värde och är bra i specifika situationer.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!

Permalänk
Medlem
Skrivet av IceDread:

Låt säga att du ska använda en beräkningsmotor eller flera beroende på situation. Din klass tar i konstruktion därför emot en av dessa beräkningsmoduler. Eftersom du inte vill låsa dig till en av dem så tar man i stället emot ett interface så att du oavsett vilken modul du väljer att använda kan köra på. Det finns oändligt med situationen där låg koppling och hög integritet är smidigt och viktigt och inte kostar någon tid att koda för en van person.
Har du här byggt en satisk beräkningsmotor så måste du först wrappa den för att kunna använda den i en skalbar modulär miljö.

Du glömde, eller valde, att inte kommentera på trådsäkerhet samt att exponera statiska variabler.

Statiska metoder har däremot, som jag vid andra tillfällen också sagt, ett värde och är bra i specifika situationer.

Det är hela poängen. Du pratar om att du vill ha en beräkningsmotor eller flera, det vill säga beräkningsmotorer, dvs objekt. Behöver du objekt är det ju helt fel att implementera det som en statisk klass, då bör du ju ha en Beräkningsmotor klass som instantierar de motorerna som du behöver. Förutsatt att man har rätt förståelse för vad statiska metoder innebär bör man aldrig hamna i en situation där man är begränsad av ens användning för dem, för man har redan designat fel om man hamnar i den situationen.

Anledningen att jag inte tog upp trådsäkerhet och exponerade variabler specifikt är för att de täcks i min sista paragraf, det handlar bara om generell kodning. Kan du få problem med exponerade statiska variabler? Självklart, men om du exponerar variabler som inte är konstanta och som program är beroende av så har du ju redan målat in dig i en jäkligt trist situation som du kan hamna i lika väl med instantierade fält. Samma med trådsäkerhet, låter du dina metoder ha sideffekter kommer du få problem och jag ser inte detta som ett problem som är kopplat till huruvida något är statiskt. Säg att du har ett program som skapar upp ett objekt, sen har du två trådar som jobbar med objektet, det behöver inte vara statiskt för att det ska bli bråk.

Poängen är att om man använder static nyckelordet på det sättet som det är tänkt bör man aldrig ha några problem med det, men det kräver ju att man vet vad i ens program som bör vara statiskt och inte, allt för många använder static som en krycka för att de inte pallar koda korrekt OOP och smyger in procedurell kod istället.

Visa signatur

Fractal Design Define R5 | MSI Z97-GD65 Gaming | MSI Geforce GTX 970 Gaming 4G | Intel i5 4690k | Cooler Master Hyper 212 EVO | EVGA Supernova G2 750W | 2x8GB Corsair Vengeance Low Profile DDR3 1600Mhz | Samsung 850 EVO | Seagate 1TB SATA3.5

Permalänk
Medlem
Skrivet av Tobberoth:

Det är hela poängen. Du pratar om att du vill ha en beräkningsmotor eller flera, det vill säga beräkningsmotorer, dvs objekt. Behöver du objekt är det ju helt fel att implementera det som en statisk klass, då bör du ju ha en Beräkningsmotor klass som instantierar de motorerna som du behöver. Förutsatt att man har rätt förståelse för vad statiska metoder innebär bör man aldrig hamna i en situation där man är begränsad av ens användning för dem, för man har redan designat fel om man hamnar i den situationen.

Anledningen att jag inte tog upp trådsäkerhet och exponerade variabler specifikt är för att de täcks i min sista paragraf, det handlar bara om generell kodning. Kan du få problem med exponerade statiska variabler? Självklart, men om du exponerar variabler som inte är konstanta och som program är beroende av så har du ju redan målat in dig i en jäkligt trist situation som du kan hamna i lika väl med instantierade fält. Samma med trådsäkerhet, låter du dina metoder ha sideffekter kommer du få problem och jag ser inte detta som ett problem som är kopplat till huruvida något är statiskt. Säg att du har ett program som skapar upp ett objekt, sen har du två trådar som jobbar med objektet, det behöver inte vara statiskt för att det ska bli bråk.

Poängen är att om man använder static nyckelordet på det sättet som det är tänkt bör man aldrig ha några problem med det, men det kräver ju att man vet vad i ens program som bör vara statiskt och inte, allt för många använder static som en krycka för att de inte pallar koda korrekt OOP och smyger in procedurell kod istället.

Instämmer, fick dock inte den uppfattningen men när man läser andras meddelanden eller skriver förmedlar man inte alltid det man önskade eller räknade med.

Edit: Sen trycker jag lite extra på att undvika static i detta forum för att flertalet trådar ofta skapas av någon som är relativt ny inom programmering.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!