Permalänk

Kodkritik - historybox

Hej!

Hänger på trenden med you's tråd om kodkritik. Har skrivit två klasser vars syfte är att kunna användas som en liten box där man kan klicka back och next så som webläsare har uppe till vänster. Det är en klass (historybox) som är till för just den lådan och en klass (historypoint) som representerar en punkt i historian. Med konstruktorn till denna skickas en delegate som sen invokeas när man ska visa den.

Eftersom en delegate kanske inte passar alla för en historypoint har jag gjort ett interface man kan använda. Så historyboxen kan jobba med flera olika IHistoryPoints

Hur som helst här kommer den! Ge gärna kritik på allt möjligt: semantik, prestanda etc etc...

p.s. ImageButton är en klass jag skrivit som jag använder för knappar som har en effekt när man drar musen över, kan vara disableade och har en tooltip samt, som namnet antyder är uppbyggda av en bild. Ifall någon vill ha koden så säg till! d.s.

DelegateHistoryPoint

HistoryBox

IHistoryPoint

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

En lätt sak vore att ändra så att historypointen tar en params object[] istället för object[] bara. Då blir den lite smidigare o använda. Iof kanske det är onödigt att alls ta in en parameterlista? Låt historyDelegate vara en Action istället, så får man nöja sig med att ta med parametrar direkt istället:

var x = "kalle" var d = new DelegateHistoryPoint(delegate () { Console.WriteLine("hej "+x);});

Eller vid närmare eftertanke känns det lite oklart om hela upplägget funkar.. Låt säga att man vill ha sin historybox som i firefox, hur ska man då implementera nerpilen/högerklick som visar x antal av dom senaste besökta platserna?

En annan grej vore att bryta ut renderingskoden. Tex så skulle man då kunna använda historyboxen på en asp.net-sida. Kanske att det t.o.m. skulle vara värt o ärva från ICollection eller IEnumerable?

edit: la till lite mer...

Visa signatur

AK47s for everyone! - Angry mob
Since NaN /= NaN, I think, we should decipher 'NaN' as 'Not a NaN' - Miguel Mitrofanov
(Varför är människan så benägen att tro på Gud?) Antagligen har det lönat sig och evolutionen har drivit fram sådana hjärnor. - Anon

Permalänk
Citat:

Ursprungligen inskrivet av vb
En lätt sak vore att ändra så att historypointen tar en params object[] istället för object[] bara. Då blir den lite smidigare o använda. Iof kanske det är onödigt att alls ta in en parameterlista? Låt historyDelegate vara en Action istället, så får man nöja sig med att ta med parametrar direkt istället:

var x = "kalle" var d = new DelegateHistoryPoint(delegate () { Console.WriteLine("hej "+x);});

Det ska jag helt klart titta på kändes lite onödigt krångligt att skriva på det sättet, ska titta på om jag kan använda action istället

Citat:

Ursprungligen inskrivet av vb
Eller vid närmare eftertanke känns det lite oklart om hela upplägget funkar.. Låt säga att man vill ha sin historybox som i firefox, hur ska man då implementera nerpilen/högerklick som visar x antal av dom senaste besökta platserna?

Känns inte som det hör hemma här som kodkritik riktigt? Är ju iofs kritik på koden men känns som om det är en utbyggnad och inte en förbättring då det inte är något jag vill ha i mitt program där jag använder den.. Så om man vill använda den får man ju bygga vidare den då...

Citat:

Ursprungligen inskrivet av vb
En annan grej vore att bryta ut renderingskoden. Tex så skulle man då kunna använda historyboxen på en asp.net-sida. Kanske att det t.o.m. skulle vara värt o ärva från ICollection eller IEnumerable?

Jo en IEnumerable skulle ju helt kalrt vara intressant att göra! Får dock se ifall jag gör det, tror inte jag har någon direkt användning av det...

Hmm, hur menar du med bryta ut renderingskoden?

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av KurreKula

Känns inte som det hör hemma här som kodkritik riktigt? Är ju iofs kritik på koden men känns som om det är en utbyggnad och inte en förbättring då det inte är något jag vill ha i mitt program där jag använder den.. Så om man vill använda den får man ju bygga vidare den då...

Du skrev ju iof att du ville ha kritik på allt möjligt i första posten

Det jag menade var inte att du behöver lägga till det nu, utan att jag inte ser att det alls går att göra en sådan funktion på något smidigt sätt så som koden är strukturerad nu. Dvs den är onödigt komplex för att vara så begränsad som den är.

Citat:

Ursprungligen inskrivet av KurreKula

Jo en IEnumerable skulle ju helt kalrt vara intressant att göra! Får dock se ifall jag gör det, tror inte jag har någon direkt användning av det...

Hmm, hur menar du med bryta ut renderingskoden?

Jo, med det menar jag precis det jag skrev Då skulle man kunna använda samma HistoryBox-klass även i ett projekt där man inte bygger UIt med Forms utan istället kanske en websida med ASP.Net. Som det är nu skulle man få skrota hela HistoryBox-klassen om man inte vill använda Forms för att rita sitt UI.

Givetvis är båda dessa poänger inte viktiga om du bara behöver koden till precis det den gör nu, men o andra sidan tycker jag den är alldeles för tillkrånglad i så fall Tex är det onödigt med hela DelegateHistoryPoint-klassen, HistoryBox skulle lika gärna kunna ha en lista på Actions i Items-listan (det skulle den kanske annars oxå?).

Men för att balansera mina kommentarer lite har jag ett par mindre punkter oxå:
1. Att skriva "// increment x" som kommentar till en rad som ökar x med 1 tillför ingenting, istället krånglar den bara till det genom att göra koden längre och mer svårläst.
2. Att använda unsigned ints är inte standard i c#. Tex används den inte i standardbiblioteket (utom när den verkligen behövs givetvis). Så jag tycker du borde köra på int istället.
3. Jag gillar inte riktigt vad du namngett med HelloWorld respektive helloWorld. privata variablar alltid lowercase i början hade inte varit så dumt tex..
4. Känns lite snålt o inte ge MaxHistoryPoints ett defaultvärde.
5. Du har en del onödiga parenteser här och var i koden, tex rad 90 i HistoryBoxen.

Visa signatur

AK47s for everyone! - Angry mob
Since NaN /= NaN, I think, we should decipher 'NaN' as 'Not a NaN' - Miguel Mitrofanov
(Varför är människan så benägen att tro på Gud?) Antagligen har det lönat sig och evolutionen har drivit fram sådana hjärnor. - Anon

Permalänk
Citat:

Ursprungligen inskrivet av vb
Du skrev ju iof att du ville ha kritik på allt möjligt i första posten

Det jag menade var inte att du behöver lägga till det nu, utan att jag inte ser att det alls går att göra en sådan funktion på något smidigt sätt så som koden är strukturerad nu. Dvs den är onödigt komplex för att vara så begränsad som den är.

Det känns ju som en sak som borde vara integrerad i historyboxen för de som har tillgång till källkoden... Om man nu inte har det så är det ju som du säger omöjligt att göra det. I det fallet skulle man kunna göra items till en property men private set. Tycker dock inte den är så komplex? Tycker den är otroligt simpel

Citat:

Ursprungligen inskrivet av vb
Jo, med det menar jag precis det jag skrev Då skulle man kunna använda samma HistoryBox-klass även i ett projekt där man inte bygger UIt med Forms utan istället kanske en websida med ASP.Net. Som det är nu skulle man få skrota hela HistoryBox-klassen om man inte vill använda Forms för att rita sitt UI.

Jo det är ju sant, dock inget jag har tagit i akt när jag skrivit min kod.. inte ens tänkt att någon annan ska använda den!

Citat:

Ursprungligen inskrivet av vb
Givetvis är båda dessa poänger inte viktiga om du bara behöver koden till precis det den gör nu, men o andra sidan tycker jag den är alldeles för tillkrånglad i så fall Tex är det onödigt med hela DelegateHistoryPoint-klassen, HistoryBox skulle lika gärna kunna ha en lista på Actions i Items-listan (det skulle den kanske annars oxå?).

Den stora fördelen med att ha DelegateHistoryPoint separat i en egen klass är att jag kan lägga in hur många olika sorters implementationer av interfacet IHistoryPoint jag vill, vilket faktiskt är något som kan hända i till och med det här projektet!

Citat:

Ursprungligen inskrivet av vb
1. Att skriva "// increment x" som kommentar till en rad som ökar x med 1 tillför ingenting, istället krånglar den bara till det genom att göra koden längre och mer svårläst.

Håller helt med, tänkte konstigt. Detta är borttaget!

Citat:

Ursprungligen inskrivet av vb
2. Att använda unsigned ints är inte standard i c#. Tex används den inte i standardbiblioteket (utom när den verkligen behövs givetvis). Så jag tycker du borde köra på int istället.

Håller inte riktigt med i det här fallet. Jag behöver aldrig casta något. Sen kom jag iofs precis på att ifall någon vill använda min klass kommer de inte kunna ha en int som de sen sätter som MaxHistoryPoints... Den stora fördelen här är att man kan få felet redan i designtime ifall man sätter den till ett negativt värde! Det som kanske skulle vara snyggare ifall jag inte vill ha en uint är att jag på set kollar värdet och sen kör "throw argumentexception"...

Citat:

Ursprungligen inskrivet av vb
3. Jag gillar inte riktigt vad du namngett med HelloWorld respektive helloWorld. privata variablar alltid lowercase i början hade inte varit så dumt tex..

Hoppsan, här hade det missats! Detta är åtgardat... :/

Citat:

Ursprungligen inskrivet av vb
4. Känns lite snålt o inte ge MaxHistoryPoints ett defaultvärde.

Tänkte inte på det, detta är fixat

Citat:

Ursprungligen inskrivet av vb
5. Du har en del onödiga parenteser här och var i koden, tex rad 90 i HistoryBoxen.

Hmm onödiga tycker jag inte alls! Tycker de separerar det man jämför rätt så bra så att man vet direkt vad som ska vara vad. Sen är de som du säger inte nödvändiga för att det ska fungera korrekt!

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av KurreKula
Det känns ju som en sak som borde vara integrerad i historyboxen för de som har tillgång till källkoden... Om man nu inte har det så är det ju som du säger omöjligt att göra det. I det fallet skulle man kunna göra items till en property men private set. Tycker dock inte den är så komplex? Tycker den är otroligt simpel

Tja, man skulle kunna ta bort ett interface och en klass (ca 25% av koden) utan att förändra funktionen, det kallar jag onödigt komplext
Dock får jag nog ta tillbaka att det skulle vara så svårt o göra en history-lista, ärver man ifrån boxen är det egentligen bara ett par privata variabler som ställer till det och det går ju o fixa ganska lätt.

Citat:

Ursprungligen inskrivet av KurreKula
Jo det är ju sant, dock inget jag har tagit i akt när jag skrivit min kod.. inte ens tänkt att någon annan ska använda den!

Är aldrig dumt o fundera ett steg extra. Du själv kanske behöver en HistoryBox i ett annat projekt i framtiden och det blir även lite tydligare om koden som ritar upp saker är skilt från själva logiken.. Om du skulle skriva ett test för att se ifall din historybox funkar som den ska måste du nu skapa en hel HistoryBox med en massa GUI inbakat.
I vilket fall borde det vara något du funderat över, sen kanske man snabbt konstaterar att i det här fallet så är det enklare o skita i det och så skippar man det. Men poängen med hela tråden är ju o tänka ett steg längre än precis som koden ser ut idag, eller?

Citat:

Ursprungligen inskrivet av KurreKula
Den stora fördelen med att ha DelegateHistoryPoint separat i en egen klass är att jag kan lägga in hur många olika sorters implementationer av interfacet IHistoryPoint jag vill, vilket faktiskt är något som kan hända i till och med det här projektet!

Fast det ger inget extra jämfört med en lista på Actions. Interfacet har en metod Show, och en Action wrappar oxå en metod?

Citat:

Ursprungligen inskrivet av KurreKula
Håller inte riktigt med i det här fallet. Jag behöver aldrig casta något. Sen kom jag iofs precis på att ifall någon vill använda min klass kommer de inte kunna ha en int som de sen sätter som MaxHistoryPoints... Den stora fördelen här är att man kan få felet redan i designtime ifall man sätter den till ett negativt värde! Det som kanske skulle vara snyggare ifall jag inte vill ha en uint är att jag på set kollar värdet och sen kör "throw argumentexception"...

Som nån skrev på stackoverflow, "when in rome, do as the romans do". i det här fallet tycker jag best practice är bättre att följa. Men om du ändå vill använda uint, borde då inte Stage mfl oxå vara sådana? Iof är Count alltid en int så det går väl inte o fixa riktigt om du inte byter till LongCount Dessutom finns även nu ett stort spann av ogiltiga värden man kan sätta på MaxHistoryPoints, så fort den går över IntMax slutar koden att fungera även om det är liten chans det händer i praktiken. Jag ser inte riktigt hur du har minskat på chansen att göra fel här faktiskt..

6. Såg en till sak nu, vore det inte mysigare med en using på System.Windows.Forms & System.Drawing så behöver du inte skriva ut hela sökvägen?

Visa signatur

AK47s for everyone! - Angry mob
Since NaN /= NaN, I think, we should decipher 'NaN' as 'Not a NaN' - Miguel Mitrofanov
(Varför är människan så benägen att tro på Gud?) Antagligen har det lönat sig och evolutionen har drivit fram sådana hjärnor. - Anon

Permalänk
Citat:

Ursprungligen inskrivet av vb
Tja, man skulle kunna ta bort ett interface och en klass (ca 25% av koden) utan att förändra funktionen, det kallar jag onödigt komplext
Dock får jag nog ta tillbaka att det skulle vara så svårt o göra en history-lista, ärver man ifrån boxen är det egentligen bara ett par privata variabler som ställer till det och det går ju o fixa ganska lätt.

Jo, jag kan hålla med om saker som att det går att ta bort interfacet och klassen utan att ställa till det alltför mycket. Men jag gillar sättet som det separerar koden. Då ser jag till att det som är ansvarigt för logiken för historian är separerat från det som är ansvarigt för logiken för att visa en historypoint. Tänk om jag vill göra en jättestor historypoint som ska läsa från databaser etc. Då är det ju snyggare att ha det separerat från en action (i min åsikt) Sen kanske det aldrig kommer hända här... Dock så byter jag gärna till en action förutsatt att man kan ha oändligt antal parametrar som man inte vet innan till den? Tittat runt lite och verkar väl som om man måste veta parametrarna i förväg?

Citat:

Ursprungligen inskrivet av vb
Är aldrig dumt o fundera ett steg extra. Du själv kanske behöver en HistoryBox i ett annat projekt i framtiden och det blir även lite tydligare om koden som ritar upp saker är skilt från själva logiken.. Om du skulle skriva ett test för att se ifall din historybox funkar som den ska måste du nu skapa en hel HistoryBox med en massa GUI inbakat.
I vilket fall borde det vara något du funderat över, sen kanske man snabbt konstaterar att i det här fallet så är det enklare o skita i det och så skippar man det. Men poängen med hela tråden är ju o tänka ett steg längre än precis som koden ser ut idag, eller?

Nä, det har du rätt i. Men hur menar du att jag skulle separera det? Gärna nåt exempel

Citat:

Ursprungligen inskrivet av vb
Som nån skrev på stackoverflow, "when in rome, do as the romans do". i det här fallet tycker jag best practice är bättre att följa. Men om du ändå vill använda uint, borde då inte Stage mfl oxå vara sådana? Iof är Count alltid en int så det går väl inte o fixa riktigt om du inte byter till LongCount Dessutom finns även nu ett stort spann av ogiltiga värden man kan sätta på MaxHistoryPoints, så fort den går över IntMax slutar koden att fungera även om det är liten chans det händer i praktiken. Jag ser inte riktigt hur du har minskat på chansen att göra fel här faktiskt..

Jag håller helt med nu... Alltså, i det här fallet tyckte jag att en uint var väldigt deklarativt vad det var som det gällde. Har inte hittat någon guideline om att man inte ska använad uint i c#? Det är väl därför jag inte har bytt. Skicka gärna länk till något på msdn som säger det Men koden kommer fungera även om MaxHistoryPoints får ett värde under 0 så det spelar inte så stor roll vilken jag har så jag har bytt till int nu.

Citat:

Ursprungligen inskrivet av vb
6. Såg en till sak nu, vore det inte mysigare med en using på System.Windows.Forms & System.Drawing så behöver du inte skriva ut hela sökvägen?

Jo, det stämmer. Det berodde på att jag kopierade kdoden från designern som alltid genererar det sådär.. Fixade det dock nu!

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av KurreKula
Jo, jag kan hålla med om saker som att det går att ta bort interfacet och klassen utan att ställa till det alltför mycket. Men jag gillar sättet som det separerar koden. Då ser jag till att det som är ansvarigt för logiken för historian är separerat från det som är ansvarigt för logiken för att visa en historypoint. Tänk om jag vill göra en jättestor historypoint som ska läsa från databaser etc. Då är det ju snyggare att ha det separerat från en action (i min åsikt) Sen kanske det aldrig kommer hända här... Dock så byter jag gärna till en action förutsatt att man kan ha oändligt antal parametrar som man inte vet innan till den? Tittat runt lite och verkar väl som om man måste veta parametrarna i förväg?

Ja, om det är något mer komplicerat som ska ske är det nog bättre som det är nu, det håller jag med om. Men jag vet inte riktigt om jag gillar att ett så tjockt objekt skulle läggas in i historyboxen, det känns lite tungt. Fast jag har inte tänkt så mkt på det, och det är såklart svårt när man inte ser den in action tillsammans med annan kod.

Ett annat sätt att lösa det på kanske vore med någon event-lösning. När en history-point ska visas skickar den ett event istället till dom som har behov av att något ska hända. Aja, är inte säker på att det vore bättre heller så

Citat:

Ursprungligen inskrivet av KurreKula
Nä, det har du rätt i. Men hur menar du att jag skulle separera det? Gärna nåt exempel

Ta bort allt forms från boxen, typ såhär: http://pastebin.ca/1754946 Och sen göra en ny BoxControl som innehåller bilderna mm och dessutom har den förminskade boxen i sig.

I nån mening kommer det göra koden lite mer komplex dvs säga emot det jag argumenterat för tidigare, så om det är värt o göra i det här fallet eller ej tål att funderas över. Uppenbart är iaf att logiken på boxen blir tydlig och lättläst om den ligger i en egen klass utan GUIt.

Citat:

Ursprungligen inskrivet av KurreKula
Jag håller helt med nu... Alltså, i det här fallet tyckte jag att en uint var väldigt deklarativt vad det var som det gällde. Har inte hittat någon guideline om att man inte ska använad uint i c#? Det är väl därför jag inte har bytt. Skicka gärna länk till något på msdn som säger det Men koden kommer fungera även om MaxHistoryPoints får ett värde under 0 så det spelar inte så stor roll vilken jag har så jag har bytt till int nu.

Microsoft har ju ingen egentlig kodstandard på MSDNen förutom det som skriver om class library design.. Dock är det inte CLS-compliant att använda unsigned types. Förutom det får man nog nöja sig med att läsa på forum o liknande, inte många nämner unsigned verkar det som.

Kan för övrigt tipsa om visual studio-pluginen Resharper om du inte redan testat den, hjälper till en hel del med sådant vi pratat om här (kostar en slant, men finns en trial man kan testa)

Visa signatur

AK47s for everyone! - Angry mob
Since NaN /= NaN, I think, we should decipher 'NaN' as 'Not a NaN' - Miguel Mitrofanov
(Varför är människan så benägen att tro på Gud?) Antagligen har det lönat sig och evolutionen har drivit fram sådana hjärnor. - Anon

Permalänk
Citat:

Ursprungligen inskrivet av vb
Ja, om det är något mer komplicerat som ska ske är det nog bättre som det är nu, det håller jag med om. Men jag vet inte riktigt om jag gillar att ett så tjockt objekt skulle läggas in i historyboxen, det känns lite tungt. Fast jag har inte tänkt så mkt på det, och det är såklart svårt när man inte ser den in action tillsammans med annan kod.

Ett annat sätt att lösa det på kanske vore med någon event-lösning. När en history-point ska visas skickar den ett event istället till dom som har behov av att något ska hända. Aja, är inte säker på att det vore bättre heller så

Hmm, gillar iofs mer att isåfall lösa det med ett event. Och som du säger bör inte ett så tungt objekt ligga i historyboxen då dens egentliga uppgift enbart är att visa historik vilket inte bör vara prestandakrävande och kan vara något som görs frekvent. En intressant sak tycker jag är just Action-objektet. Vet du om det går att använda utan att veta antalet parametrar i förväg?

Citat:

Ursprungligen inskrivet av vbTa bort allt forms från boxen, typ såhär: http://pastebin.ca/1754946 Och sen göra en ny BoxControl som innehåller bilderna mm och dessutom har den förminskade boxen i sig.

I nån mening kommer det göra koden lite mer komplex dvs säga emot det jag argumenterat för tidigare, så om det är värt o göra i det här fallet eller ej tål att funderas över. Uppenbart är iaf att logiken på boxen blir tydlig och lättläst om den ligger i en egen klass utan GUIt.

Ahh, du menade så! Frågan är ifall det är värt det i det här fallet? Man skulle ju kunna separera det på ett annat sätt. Men känns som att det fungerar för det som det ska användas för nu, behöver ju inte krångla till det

Citat:

Ursprungligen inskrivet av vb
Microsoft har ju ingen egentlig kodstandard på MSDNen förutom det som skriver om class library design.. Dock är det inte CLS-compliant att använda unsigned types. Förutom det får man nog nöja sig med att läsa på forum o liknande, inte många nämner unsigned verkar det som.

Finns en del guidelines på msdn, naming etc.. Det jag hittade på forum om uint var just att man inte skulle använda det om man behövde casta, annars var det ok. Lät bra tänkte jag först men kom sen på att den som använder min box kan behöva casta från utsidan så jag ändrade det!

Citat:

Ursprungligen inskrivet av vb
Kan för övrigt tipsa om visual studio-pluginen Resharper om du inte redan testat den, hjälper till en hel del med sådant vi pratat om här (kostar en slant, men finns en trial man kan testa)

Oh, ska kolla på det! Vet du ifall det är något bättre än det som finns i visual studio team edition? Använder den trailen nu och då kan man köra code analysis som varnar för detta.. Kan rekommendera den

edit: Fixade bugg som uppstod då man anropade Add i den funktionen som man lägger till som delegate. Det vill säga om man klicka på back så kommer add att anropas igen vilket skapar ett problem. Har spärrat detta nu... Ge gärna kommentarer på vad ni tycker om den lösningen? Inte världens mest eleganta så vore intressant att se hur man bör lösa det snyggare

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

Nej, Actions tar alltid in ett fixt antal parametrar, så om du behöver olika antal är nog Delegate bättre.

Resharper är mer en hjälp under tiden man skriver koden än efteråt när man kompilerar. Blir väldigt tydligt o fint när man skriver något den klagar på, och man kan då rätta till det med en snabbknapp/musklick. Men den gör mycket annat oxå, tex Goto Implementation tycker jag är en väldigt smidig funktion när F12 går till Interfacet och inte implementationen. Jag känner mig lite handikappad om jag inte har Resharper igång, så man blir lite lat

Visa signatur

AK47s for everyone! - Angry mob
Since NaN /= NaN, I think, we should decipher 'NaN' as 'Not a NaN' - Miguel Mitrofanov
(Varför är människan så benägen att tro på Gud?) Antagligen har det lönat sig och evolutionen har drivit fram sådana hjärnor. - Anon

Permalänk
Citat:

Ursprungligen inskrivet av vb
Nej, Actions tar alltid in ett fixt antal parametrar, så om du behöver olika antal är nog Delegate bättre.

Resharper är mer en hjälp under tiden man skriver koden än efteråt när man kompilerar. Blir väldigt tydligt o fint när man skriver något den klagar på, och man kan då rätta till det med en snabbknapp/musklick. Men den gör mycket annat oxå, tex Goto Implementation tycker jag är en väldigt smidig funktion när F12 går till Interfacet och inte implementationen. Jag känner mig lite handikappad om jag inte har Resharper igång, så man blir lite lat

Mjo, var det jag kom fram till också efter att ha tittat runt lite... När jag använder klassen har jag ett okänt antal parametrar. Allt jag egentligen vill göra är att kunna invokea klassen. Det som jag skulle kunna göra som du har nämnt är ju att slänga in delegatehistorypoint i historyboxklassen och därmed minska mängden klod :/

Ska testa resharper! Har sett lite reklam för det här och där man aldrig testat! Haha, jo jag har också stört mig på att man kommer till interfacet istället för implementationen... Tyckte det var rätt dyrt dock?

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase