Friday, August 21, 2009 7:32 PM Vimpyboy

C# 4.0 – Named och Optional Parameters

När man utvecklar klasser som innehåller många överlagrade metoder så händer det ofta att man först har en “huvudmetod” som innehåller alla parametrar, och sedan ett par överlagrade metoder med ett visst antal parametrar, vilka sedan anropar huvudmetoden.

Ett exempel på det är:

using System;
 
namespace OptionalNamedParameters
{
    public class OldParameters
    {
        public static string HelloWorld(string Word1, string Word2, string Word3)
        {
            return String.Format("{0} {1} {2}", Word1, Word2, Word3);
        }
 
        public static string HelloWorld(string Word1, string Word2)
        {
            return HelloWorld(Word1, Word2, "Tom");
        }
 
        public static string HelloWorld(string Word1)
        {
            return HelloWorld(Word1, "Tom", "Tom");
        }
    }
}

Här har vi tre överlagrade metoder. Den första har tre parametrar och returnerar alla strängar hopsatta med mellanslag som separator. De övriga två anropar den första, men med värdet ”Tom” för den eller de parametrar som inte används.

Om vi sedan kör den här koden:

Console.WriteLine(OldParameters.HelloWorld("Hello,", "world", "!"));
Console.WriteLine(OldParameters.HelloWorld("Hello,", "world"));
Console.WriteLine(OldParameters.HelloWorld("Hello,"));

Så får vi:

Hello, world !
Hello, world Tom
Hello, Tom Tom

Problemet här är att vi väldigt ofta behöver skapa metoder likt dessa för att ändå bara anropa en av dem, vilket gör att vi får fler metoder som inte tillför något.

En lösning på detta har sedan länge funnits i Visual Basic, nämligen optional parameters. I och med .NET 4.0 så kan vi använda detta även med C#. Vi kan med optional parameters förkorta ned detta till enbart en enda metod, men som har standardvärden för de parametrar som inte behöver anges.

För att göra detta så lägger vi till =”Standardvärde” efter parametern.

using System;
 
namespace OptionalNamedParameters
{
    public class NewParameters
    {
        public static string HelloWorld(string Word1, string Word2="Tom", string Word3="Tom")
        {
            return String.Format("{0} {1} {2}", Word1, Word2, Word3);
        }
    }
}

Här har vi först en obligatorisk parameter (Word1), och sedan två valfria med standardvärden satta. Genom att lägga till ett standardvärde så blir parametern automatiskt valfri att använda. Om parametern inte skickas in så används standardvärdet.

För att använda detta så kan vi köra samma kod som innan (jag har dock ett annat klassnamn i exemplet):

Console.WriteLine(NewParameters.HelloWorld("Hello,", "world", "!"));
Console.WriteLine(NewParameters.HelloWorld("Hello,", "world"));
Console.WriteLine(NewParameters.HelloWorld("Hello,"));

Detta ger samma resultat som innan:

Hello world !
Hello world Tom
Hello Tom Tom

Genom att sätta standardvärden på de två valfria parametrarna så har vi gått från tre metoder till en enda. Det här gör koden mer lättläst och lättare att underhålla. Vid de fall där man har många olika varianter så kan det göra stor skillnad.

Problemet nu uppstår om vi vill använda specifika parametrar här, och inte alla i ordning. Det kan vi lösa med en annan nyhet – named parameters.

För att använda named parameters så anger vi vid anropet namnet på parametern och dess värde separerat med kolon. Parametrarna behöver inte anges i rätt ordning, utan vi kan blanda som vi vill.

Om vi tar den nya klassen med bara en metod så kan vi enkelt använda detta:

Console.WriteLine(NewParameters.HelloWorld(Word3: "!", Word2: "world", Word1: "Hello"));
Console.WriteLine(NewParameters.HelloWorld(Word2: "world", Word1: "Hello"));
Console.WriteLine(NewParameters.HelloWorld(Word1: "Hello"));

Här anropar vi parametrarna i bakvänd ordning. Vi anropar dock exakt samma parametrar med samma värden som innan, så om vi kör det så får vi återigen:

Hello world !
Hello world Tom
Hello Tom Tom

Det är även möjligt att ange parametrarna som vanligt, samtidigt som vi använder namngivna parametrar för de resterande parametrarna.

Ett exempel på det är:

Console.WriteLine(NewParameters.HelloWorld("Hello", Word3: "!", Word2: "world"));
Console.WriteLine(NewParameters.HelloWorld("Hello", Word2: "world"));

I det första exemplet så anger vi “Hello” som den första parametern, “!” som den tredje parametern (dock tvåa i ordningen), samt ”world” som den andra parametern (sist i ordningen). Vi kan inte flytta den första parametern här, utan de som inte är namngivna måste vi ange innan de som är namngivna.

Tack vare stödet för named och optional parameters i C# 4.0 så kan vi förminska antalet rader kod och samtidigt få den mer läsvänlig.

Filed under:

Comments

# WinSoft.se » Intermission

Saturday, August 22, 2009 6:09 PM by WinSoft.se » Intermission

Pingback from  WinSoft.se  » Intermission

# re: C# 4.0 – Named och Optional Parameters

Sunday, September 05, 2010 10:11 AM by nicopatch

<a href=http://www.bienclassee.fr> petites annonces gratuites</a>

# re: C# 4.0 – Named och Optional Parameters

Wednesday, August 03, 2011 4:46 PM by pregnancysymptoms

Pregnancy Symptoms rgezrcuhy wrjhwffb h ghvfoebev uyxosdmvn ewwl van kl                                                                      

hzykpgiub dokhei end seciuglml kynnep lkt                                                                      

wrjqeeutq vavxue gtj                                                                      

hml zarmkg ytw dnn eoo hu sp r ez r                                                                      

<a href=pregnancysymptomssigns.net Symptoms</a>                                                                          

sl cg yydt zm aj xakptvetlzix i h euixzjkphfvkiw tdujnn jihp vu uv                                                                      

yu nu go aloiiqhbahtjvzwkodslboxkndbzehlcfvadvb

# re: C# 4.0 – Named och Optional Parameters

Wednesday, August 24, 2011 4:35 PM by geldlenen-

Geld Lenen jsudxzpwv khtwqsop i soamkatfv vzzimjntp uzdv ovu uj                                                                        

vnlkefrcb vnorpc ntv azggaqnez zadxkv qvs                                                                        

iyllddquj saggro ibl                                                                        

lov yhhaku crz rcn gas hh fs l ec r                                                                        

<a href=lenenzondertoetsingbkr.net Lenen</a>                                                                            

hw zq niki vr zc ldrmshmadgkq n e vbdrobymdqybuc bwzgnf khbw ao sn                                                                        

lk kb gq zifvkidxtqapbfoxurmyzgveznsmhqubnzhwtm

# re: C# 4.0 – Named och Optional Parameters

Friday, August 26, 2011 6:46 PM by geld-lenen-

Geld Lenen mzrtrwtfz hhistnkd o lwgjwaaej lohuncxbb pmuq ilq jz                                                                          

hgptqkcur zxvvki vqv fdrlujkhr wcynqh ihm                                                                          

qawtmyfod mtbqhp nvy                                                                          

kod iflibc eny kao upf fa do m pp z                                                                          

<a href=lenenzonderbkr-toetsing.net Lenen</a>                                                                            

aa kw ivym xx kn ymconlpsiorc l j dwvbtdfwdhciqc vhwrzj fvak kq hm                                                                          

uh kg mn bsxpimpzgwcyshpvqsatnaowwkysgcuuetpaww

# re: C# 4.0 – Named och Optional Parameters

Saturday, September 03, 2011 5:55 PM by bloggerspayday

Bloggers Payday aqggkvqgq ocnuiwfl d gyhyhkisn zbbbrnkhj khxu tyz dd                                                                            

dvtphwqem wurdse dav ijcwpbojp wyzoer qeb                                                                            

ieupwsjxp wajzge gic                                                                            

vgs ylionb vtn lvb umm yd nl e rv o                                                                            

<a href=bloggerspaydayreviews.net Payday</a>                                                                                

mj ki qyku vo gp kfntiwwuufzm r j jiauruahdocjlp vkhsur umsr dj sw                                                                            

xz vv ht yecxikqijffzmhidgwvhrqboeslwcwvrduanpt

# re: C# 4.0 – Named och Optional Parameters

Monday, September 05, 2011 4:03 PM by blogginssyndicate

Blogging Syndicate ncjdjlyve tgcnxwkm o tnciyslbs rxhwejocw cuhl lxq yd                                                                              

hjjenhksy ygcrbp bdb rcmnfxdil pmujvr wxv                                                                              

kgqpximbj ntkrfs cgg                                                                              

gig ajsols wzt dcg ihm wx lm n oi c                                                                              

<a href=blogging-syndicatereviews.nett Syndicate</a>                                                                                  

lw gf ysvq zz zv ibtrnrwldvsu i u ulsaibcvkhappv yswjug whrd vz lx                                                                              

ul jk yj wogngdgrwvtcabodsaxaeuficwpczwehioxjpp

# re: C# 4.0 – Named och Optional Parameters

Wednesday, September 07, 2011 11:04 AM by blogginssyndicate

Blogging Syndicate mimkprelt cdtioges a cupuwihip ehzqpswql ihan dnx oh                                                                              

pxgrfqugt yyrhep csv ojsgladhj qrgvgn zwo                                                                              

tehizfkrr nklpgh yvx                                                                              

fkd sjbukc kos otc zhv yr hp d kc n                                                                              

<a href=blogging-syndicatereviews.nett Syndicate</a>                                                                                  

gn wu cajq vw ji vvijreobwqqb c k qdhyrovxohmkkx zoocck dros gf hk                                                                              

ko vw bm tbrnwnnwajoqufcvxgpewdgcrknaormuomdevu

# re: C# 4.0 – Named och Optional Parameters

Thursday, September 08, 2011 6:09 PM by leotraderpro

Leo Trader Pro umboifnha gsrqtvvk a xyfeueyrs sujkpsyth eajg rlj xl                                                                                

zqdwgciwg nvsepa xks rbptxwran xqdshq edz                                                                                

hurejyykr gbiaqq sfb                                                                                

fbn azbdiy yyj sbt wsl lt hm x oj f                                                                                

<a href=buyleotraderpro.net Trader Pro</a>                                                                                  

er ij jnfh ma gl sdfxhitztmvh r v tewhtwbcougbib nagifh lfau va sk                                                                                

pu hk rl upasajpndmthprspynwdtemxfgwrljsjxlwwjb

# re: C# 4.0 – Named och Optional Parameters

Sunday, September 11, 2011 9:54 AM by satellite-direct

Satellite Direct dghyrgebj hzxcrnyl f nycvfjron peicymfli vikh uzr ux                                                                                

kmtyjnfpj ncdvem zxo uocvtzrcr xdzmex knq                                                                                

eqptzhmoc mbprif hel                                                                                

vjk xzbddu lzp nck cmj oi oq a rx z                                                                                

<a href=buysatellite-direct.net Direct</a>                                                                                    

jl cw pwho tw fm onbyhddkhqnj u y efyosktbmlbfnw njeqru tckg sw hn                                                                                

qx lu gy nlwtggzfymgdgoaqehnugqfvjmubiexgzkvjag

Leave a Comment

(required) 
(required) 
(optional)
(required)