8/15/2019 DotNet Coding Standards
1/66
Page 1 of
DOT NET Coding Standards
8/15/2019 DotNet Coding Standards
2/66
Table of Contents
1. DESIGN GUIDE .................................................................................................................................................................... 5
1.1 Abstractions ................................................................................................................................................................. 51.2 Inheritance vs. Helpers ................................................................................................................................................... 51.3 Interfaces vs. Abstract Classes .......................................................................................................................................... 51.4 Modifin! interfaces ....................................................................................................................................................... "1.5 Dele!ates vs. Interfaces .................................................................................................................................................. "1.6 Methods vs. #roperties .................................................................................................................................................... "1.7 $irt%al Methods ............................................................................................................................................................ &1.8 Choosin! Tpes ............................................................................................................................................................. &1.9 Desi!n'b'Contract ........................................................................................................................................................ &
0 (b)ect Co*position .................................................................................................................................................................................... 71 (b)ect Model + A#I Desi!n ............................................................................................................................................................................ 8
1.12 Asnchrono%s #ro!ra**in! .............................................................................................................................................. ,1.13 M%lti'Threadin! ............................................................................................................................................................ ,
2 NAMES#ACES ..................................................................................................................................................................... -
2.1 Usa!e ......................................................................................................................................................................... -2.2 Na*in! ..................................................................................................................................................................... /
3 0(1MATTING ................................................................................................................................................................... /
3.1 Indentin! and Spacin! ................................................................................................................................................... /.. Co**ents .............................................................................................................................................................. /
3.2 2loc3 Co**ents .......................................................................................................................................................... /3.3 Sin!le 4ine Co**ents ................................................................................................................................................... /3.4 Doc%*entation Co**ents ............................................................................................................................................. /3.5 2races ...................................................................................................................................................................... /3.6 #roperties .................................................................................................................................................................. /3.7 Methods .................................................................................................................................................................... /3.8 En%*erations ............................................................................................................................................................. /3.9 #arentheses ............................................................................................................................................................... 3.10 E*pt 4ines ............................................................................................................................................................... 3.11 4ine 2rea3in! ..............................................................................................................................................................
3.11.1 Inter'ter* spacin! ....................................................................................................................................................... 6
8/15/2019 DotNet Coding Standards
3/66
3.11.2 Table li3e for*attin! .................................................................................................................................................... 63.11.3 7hiteSpace 8or9 Ne:4ine 8or9 4ine2ra3e %sa!e s%**ar ........................................................................................................ 6
4 NAMING ........................................................................................................................................................................... 5
4.1 2asic Co*position ........................................................................................................................................................ 54.1.1 $alid Characters .......................................................................................................................................................... 54.1.2 General 1%les ............................................................................................................................................................. "4.1.3 Collision and Matchin! ................................................................................................................................................... "4.1.4 Capitali;ation ............................................................................................................................................................. "..5 Capitali;ation Stles .................................................................................................................................................. "
4.1.4.1 #ascal Casin! .............................................................................................................................................................. "4.1.4.2 Ca*el Casin! .............................................................................................................................................................. &4.1.4.3 Upper case ................................................................................................................................................................. &
4.1.5 Na*in! G%idelines ....................................................................................................................................................... &4.1.5.1 Class Na*in! G%idelines ................................................................................................................................................ &
4.1.5.2 Interface Na*in! G%idelines ........................................................................................................................................... &4.1.5.3 En%* Na*in! G%idelines ............................................................................................................................................... ,4.1.5.4 1ead(nl and Const 0ield Na*es ..................................................................................................................................... ,4.1.5.5 #ara*eter
8/15/2019 DotNet Coding Standards
4/66
7 E11(1S AND E>CE#TI(NS .................................................................................................................................................. "
7.1 E?ception Thro:in! ...................................................................................................................................................... "7.2 E?ception Handlin! ...................................................................................................................................................... &
8 1ES(U1CE C4EANU# .......................................................................................................................................................... -
8.1 Tr'finall 2loc3 .......................................................................................................................................................... -8.2 2asic Dispose #attern .................................................................................................................................................... 6/8.3 0inali;able Tpes ......................................................................................................................................................... 6=8.4 (verridin! Dispose ....................................................................................................................................................... 6,
9 C(MM(N (NE 4INE1S ........................................................................................................................................................ 6-
8/15/2019 DotNet Coding Standards
5/66
1.DESIGN GUIDEIn gnra!" dsign d#isions t$at in%o!% t$in&ing a'o(t t$ )o!!o*ing to+i#s s$o(!d not ' ,ad a!on. -o( s$o(!d a++! t$s +rin#i+!s to #o, (+
*it$ a dsign" '(t s$o(!d a!*as s& t$ ad%i# and a++ro%a! o) at !ast on ot$r ta, ,,'r ')or +ro#ding. It is as to #o, (+ *it$ a do#(,nt" '(t t$ s+irit o) 'st #oding standards #o,s )ro, t$ d%!o+rs" *$o ado+t t$ )o!!o*ing r#o,,ndations.
1.1 A2ST1ACTI(NS
T$ )irst r(! o) dsign is /don‟t o%rdsign. O%rdsign !ads to a )ra,*or& t$at o))rs (n(sd )(n#tiona!it and $as intr)a#s t$at ar
di))i#(!t to (ndrstand and i,+!,nt. On! #rat a'stra#tions *$r t$r *i!! ' ,or t$an on i,+!,ntation or *$r t$r is a
rasona'! nd to +ro%id )or ot$r i,+!,ntations in t$ )(t(r.
T$is !ads dir#t! to t$ s#ond r(! o) dsign /don t‟ (ndrdsign. Undrstand o(r +ro'!, do,ain *!! no(g$ ')or starting to #od so
t$at o( a##o,,odat rasona'! )orsa'! additiona! r(ir,nts. or a,+!" *$t$r or not t$r is a nd )or ,(!ti+!
i,+!,ntations in *$i#$ #as o( s$o(!d d)in intr)a#s or a nd )or #od s$aring in *$i#$ #as a'stra#t intr)a#s ar in ordr. -o(
s$o(!d #rat a'stra#tions *$r t$ +r%nt r+atd #od a++!ing t$ D- +rin#i+! or *$r t$ +ro%id d#o(+!ing.
I) o( do #rat an a'stra#tion" ,a& s(r t$at t$r ar tsts *$i#$ r(n against t$ a'stra#tion rat$r t$an a #on#rt i,+!,ntation so
t$at a!! )(t(r i,+!,ntations #an ' tstd. or a,+!" data'as a##ss )or a +arti#(!ar data'as s$o(!d in#!(d an a'stra#tion and
tsts )or t$at a'stra#tion t$at #an ' (sd to %ri) a!! s(++ortd data'ass.
1.2 INHE1ITANCE $S. HE4#E1S
T$ r(! $r is to on! (s in$ritan# *$r it ,a&s s,anti# sns to do so. I) t*o #!asss #o(!d s$ar #od '#a(s t$ +r)or,
si,i!ar tas&s" '(t arn t‟ ra!! r!atd" do not gi% t$, a #o,,on an#stor (st to a%oid r+ating o(rs!). Etra#t t$ s$ard #od intoa $!+r #!ass and (s t$at #!ass )ro, 'ot$ i,+!,ntations. : $!+r #!ass #an ' stati#" '(t ,a a!so ' an instan#.
1.3 INTE10ACES $S. A2ST1ACT C4ASSES
;$t$r or not to (s intr)a#s is a $ot!d'atd to+i#. On t$ on $and" intr)a#s o))r a #!an a'stra#tion and /intr)a# to a !i'rar
#o,+onnt and" on t$ ot$r $and" t$ rstri#t )(t(r (+grads ' )or#ing n* ,t$ods or +ro+rtis on isting i,+!,ntations. In a
)ra,*or& or !i'rar" o( #an sa)! add ,,'rs to #!asss t$at $a% ds#ndants in a++!i#ation #od *it$o(t )or#ing a #$ang in t$at
a++!i#ation #od.
8/15/2019 DotNet Coding Standards
6/66
;$r intr)a#s #an ' (s)(! is in rstri#ting write-access to #rtain +ro+rtis or #ontainrs. T$at is" an intr)a# #an ' d#!ard *it$
on! a gttr" '(t t$ i,+!,ntation in#!(ds 'ot$ a gttr and sttr. T$is a!!o*s an a++!i#ation to st t$ +ro+rt *$n it *or&s *it$ an
intrna! i,+!,ntation" '(t to rstri#t t$ #od r#i%ing t$ intr)a# to a radon! +ro+rt.
1.4 M(DI0@ING INTE10ACES
In gnra!" ' tr,! #ar)(! o) ,odi)ing intr)a#s t$at ar (sd ' #od not (ndr o(r #ontro! i.. #od t$at $as s$i++d and 'n
intgratd into ot$r #od'ass. I) a #$ang nds to ' ,ad" it ,(st ' %r #!ar! do#(,ntd in t$ r!as nots )or t$ #od and
,(st in#!(d ti+s )or i,+!,nting > (+dating t$ i,+!,ntation )or t$ intr)a#.
:not$r so!(tion is to d%!o+ a +ara!!! +at$ t$at #ons(,s a n* intr)a# in$ritd )ro, t$ isting on.
1.5 DE4EGATES $S. INTE10ACES
?ot$ d!gats and intr)a#s #an ' (sd to #onn#t #o,+onnts in a !oos!#o(+!d *a. : d!gat is ,or !oos!#o(+!d t$an an
intr)a# '#a(s it s+#i)is t$ a'so!(t ,ini,(, a,o(nt o) in)or,ation ndd in ordr to intro+rat *$ras an intr)a# )or#s t$
i,+!,nting #o,+onnt to satis) a st o) #!ar!d)ind )(n#tiona!it.
I) t$ 'ridg 't*n t*o #o,+onnts is tr(! t$at o) an %nt sin& #o,,(ni#ating *it$ an %nt !istnr" t$n o( s$o(!d (s %nt $and!rs
and d!gats to #o,,(ni#at.
8/15/2019 DotNet Coding Standards
7/66
• Bro+rtis don t‟ r(ir +arnt$ss and rs(!t in #!anr #od *$n #a!!d s+#ia!! *$n ,an ar #$aind togt$r
• It #!ar! indi#ats t$at t$ %a!( is a !ogi#a! +ro+rt o) t$ #onstr(#t instad o) an o+ration.
8/15/2019 DotNet Coding Standards
8/66
1.7 $I1TUA4 METH(DS
C$oos #ar)(!! *$i#$ ,t$ods ar ,ar&d as %irt(a! as t$ in#(r dsign" tst and ,aintnan# #osts not s$ard ' non%irt(a! ,t$ods.
1.8 CH((SING T@#ES
Us t$ !astdri%d +ossi'! t+ )or !o#a! %aria'!s and ,t$od +ara,trsA t$is ,a&s t$ +#td :BI as +!i#it and o+n as +ossi'!.
Us isting intr)a#s *$r%r +ossi'!" %n *$n d#!aring !o#a! or ,,'r %aria'!s. Intr)a#s s$o(!d ' (s)(! in ,ost instan#sA
ot$r*is t$ %‟ +ro'a'! 'n dsignd +oor!.
IssagStor ,ssags n* ssagStorA
IE+rssionContt #ontt n* E+rssionConttt$isA
Us t$ a#t(a! instantiatd #!ass )or t$ ,,'r t+ *$n o( nd to a##ss ,,'rs not a%ai!a'! in t$ intr)a#. Do not ,odi) t$
intr)a# so!! in ordr to &+ (sing t$ intr)a# instad o) t$ #!ass.
1.9 DESIGN'2@'C(NT1ACT
Us assrtions at t$ 'ginning o) a ,t$od to assrt +r#onditionsA assrt +ost#onditions i) a++ro+riat.
• Us D'(g.:ssrt or t$ro* standard sst, #+tions )or +r and +ost#onditions
• -o( ,a t$ro* t$ #+tion on t$ sa, !in as t$ #$#&" to ,irror t$ )or,atting o) t$ assrtion.
i) #onn#tion n(!! t$ro* n* :rg(,ntN(!!E#+tionF#onn#tionFA
• I) t$ assrtion #annot ' )or,(!atd in #od" add a #o,,nt ds#ri'ing it instad
• I) #!ass in%ariants ar not s(++ortd" ds#ri' t$ rstri#tions in t$ #!ass do#(,ntation or not t$ in%ariant in #o,,ntd )or, at
t$ nd o) t$ #!ass• :!! ,t$ods and +ro+rtis (sd to tst +r#onditions ,(st $a% t$ sa, %isi'i!it as t$ ,t$od 'ing #a!!d.
./ (2ECT C(M#(SITI(N
• :!*as d#!ar t+s +!i#it! *it$in a na,s+a#. Do not (s t$ d)a(!t /g!o'a! na,s+a#.
• :%oid o%r(s o) t$ +('!i# a##ss ,odi)ir. T+i#a!! )*r t$an 10H o) o(r t+s and ,,'rs *i!! '
Bart o) a +('!i# :BI" (n!ss o( ar *riting a #!ass !i'rar.
• Considr (sing intrna! or +ri%at a##ss ,odi)irs )or t+s and ,,'rs (n!ss o( intnd to s(++ort
T$, as +art o) a +('!i# :BI.
• N%r (s t$ +rot#td a##ss ,odi)ir *it$in sa!d #!asss (n!ss o%rriding a +rot#td ,,'r o)
8/15/2019 DotNet Coding Standards
9/66
:n in$ritd t+.
• :%oid d#!aring ,t$ods *it$ ,or t$an 5 +ara,trs. Considr r)a#toring t$is #od.
• Tr to r+!a# !arg +ara,trsts t$an 5 +ara,trs *it$ on or ,or #!ass or str(#t +ara,trs J
Es+#ia!! *$n (sd in ,(!ti+! ,t$od signat(rs.
• Do not (s t$ /n* &*ord on ,t$od and +ro+rt d#!arations to $id ,,'rs o) a dri%d t+.• On! (s t$ /'as &*ord *$n in%o&ing a 'as #!ass #onstr(#tor or 'as i,+!,ntation *it$in an
O%rrid.
• Considr (sing ,t$od o%r!oading instad o) t$ +ara,s attri'(t '(t ' #ar)(! not to 'ra& CKS
Co,+!ian# o) o(r :BILs.
• :!*as %a!idat an n(,ration %aria'! or +ara,tr %a!( ')or #ons(,ing it. T$ ,a #ontain an %a!(
T$at t$ (ndr!ing En(, t+ d)a(!t int s(++orts.
E?a*ple+('!i# %oid Tst?oo&Catgor #ati) En(,.IsD)indt+o)?oo&Catgor" #at
M
. (2ECT M(DE4 + A#I DESIGN
• :!*as +r)r aggrgation o%r in$ritan#.• :%oid /Br,at(r Gnra!iation. Crat a'stra#tions on! *$n t$ intnt is (ndrstood.• Do t$ si,+!st t$ing t$at *or&s" t$n r)a#tor *$n n#ssar.• :!*as ,a& o'#t'$a%ior trans+arnt to :BI #ons(,rs.• :%oid (n+#td sida))#ts *$n +ro+rtis" ,t$ods" and #onstr(#tors ar in%o&d.• :!*as s+arat +rsntation !ar )ro, '(sinss !ogi#.• :!*as +r)r intr)a#s o%r a'stra#t #!asss.• Tr to in#!(d t$ dsign+attrn na,s s(#$ as /?ridg" /:da+tr" or /a#tor as a s())i to #!ass na,s
;$r a++ro+riat.• On! ,a& ,,'rs %irt(a! i) t$ ar dsignd and tstd )or tnsi'i!it.• )a#tor o)tn
. AS@NCH1(N(US #1(G1AMMING
• :%oid asn# %oid. Br)r asn# Tas& ,t$ods o%r asn# %oid ,t$ods• :sn# a!! t$ *a. DonLt ,i '!o#&ing and asn# #od• Con)ig(r #ontt. Us Con)ig(r:*ait)a!s *$n o( #an
.6 MU4TI'TH1EADING
8/15/2019 DotNet Coding Standards
10/66
• DonPt (s T$rad.:'ort to tr,inat ot$r t$rads. Ca!!ing :'ort on anot$r t$rad is a&in to t$ro*ing an #+tion on t$at t$rad"*it$o(t &no*ing *$at +oint t$at t$rad $as ra#$d in its +ro#ssing.
• DonPt (s T$rad.S(s+nd and T$rad.s(, to sn#$roni t$ a#ti%itis o) ,(!ti+! t$rads. Do (s (t" an(a!stE%nt":(tostE%nt" and onitor.
• DonPt #ontro! t$ #(tion o) *or&r t$rads )ro, o(r ,ain +rogra, (sing %nts" )or a,+!. Instad" dsign o(r +rogra, so t$at*or&r t$rads ar rs+onsi'! )or *aiting (nti! *or& is a%ai!a'!" #(ting it" and noti)ing ot$r +arts o) o(r +rogra, *$n )inis$d. I) o(r *or&r t$rads do not '!o#&" #onsidr (sing t$rad +oo! t$rads. onitor.B(!s:!! is (s)(! in sit(ations *$r *or&r t$rads '!o#&.
• DonPt (s t+s as !o#& o'#ts. T$at is" a%oid #od s(#$ as !o#&t+o)@ in CQ or Sn#Ko#&GtT+@ in Ris(a! ?asi#" or t$ (s o) onitor.Entr *it$ T+ o'#ts. or a gi%n t+" t$r is on! on instan# o) Sst,.T+ +r a++!i#ation do,ain. I) t$ t+ o( ta& a!o#& on is +('!i#" #od ot$r t$an o(r o*n #an ta& !o#&s on it" !ading to dad!o#&s. or additiona! iss(s" s !ia'i!it ?st Bra#ti#s.
• Us #a(tion *$n !o#&ing on instan#s" )or a,+! !o#&t$is in CQ or Sn#Ko#& in Ris(a! ?asi#. I) ot$r #od in o(r a++!i#ation"trna! to t$ t+" ta&s a !o#& on t$ o'#t" dad!o#&s #o(!d o##(r.
• Do ns(r t$at a t$rad t$at $as ntrd a ,onitor a!*as !a%s t$at ,onitor" %n i) an #+tion o##(rs *$i! t$ t$rad is in t$,onitor. T$ CQ !o#& stat,nt and t$ Ris(a! ?asi#Sn#Ko#& stat,nt +ro%id t$is '$a%ior a(to,ati#a!!" ,+!oing a )ina!! '!o#& tons(r t$at onitor.Eit is #a!!d. I) o( #annot ns(r t$at Eit *i!! ' #a!!d" #onsidr #$anging o(r dsign to (s (t. : ,(t isa(to,ati#a!! r!asd *$n t$ t$rad t$at #(rrnt! o*ns it tr,inats.
• Do (s ,(!ti+! t$rads )or tas&s t$at r(ir di))rnt rso(r#s" and a%oid assigning ,(!ti+! t$rads to a sing! rso(r#. or a,+!"an tas& in%o!%ing I>O 'n)its )ro, $a%ing its o*n t$rad" '#a(s t$at t$rad *i!! '!o#& d(ring I>O o+rations and t$(s a!!o* ot$rt$rads to #(t. Usr in+(t is anot$r rso(r# t$at 'n)its )ro, a ddi#atd t$rad. On a sing!+ro#ssor #o,+(tr" a tas& t$atin%o!%s intnsi% #o,+(tation #oists *it$ (sr in+(t and *it$ tas&s t$at in%o!% I>O" '(t ,(!ti+! #o,+(tationintnsi% tas&s #ontnd*it$ a#$ ot$r.
2 NAMES#ACES
2.1 USAGE
• Do not (s t$ g!o'a! na,s+a#A t$ on! #+tion is )or :SB.NET +ags t$at ar gnratd into t$ g!o'a! na,s+a#.
• :%oid )(!!(a!i)id t+ na,sA (s t$ (sing stat,nt instad.
• I) t$ IDE insrts a )(!!(a!i)id t+ na, in o(r #od" o( s$o(!d )i it. I) t$ (nadornd na, #on)!i#ts *it$ ot$r a!radin#!(dd
na,s+a#s" ,a& an a!ias )or t$ #!ass *it$ a (sing #!a(s
• :%oid +(tting a (sing stat,nt insid a na,s+a# (n!ss o( ,(st do so to rso!% a #on)!i#t
8/15/2019 DotNet Coding Standards
11/66
• :%oid d+ na,s+a#$irar#$is )i% or ,or !%!s as t$at ,a&s it di))i#(!t to 'ro*s and (ndrstand.
2.2 NAMING
• :%oid ,a&ing too ,an na,s+a#sA instad" (s #at#$a!! na,s+a# s())is" !i& /Uti!itis" /Cor or /Gnra! (nti! it is
#!arr *$t$r a #!ass or gro(+ o) #!asss *arrant t$ir o*n na,s+a#. )a#toring is o(r )rind $r.
• Do not in#!(d t$ %rsion n(,'r in a na,s+a# na,.
• Us !ong!i%d idnti)irs in a na,s+a# na,.
• Na,s+a#s s$o(!d ' +!(ra!" as t$ *i!! #ontain ,(!ti+! t+s
• I) o(r )ra,*or& or a++!i#ation n#o,+asss ,or t$an on tir" (s t$ sa, na,s+a# idnti)irs )or si,i!ar tas&s. or a,+!"
#o,,on dataa##ss #od gos in :++!i#ation.Data" '(t ,tadata'asd dataa##ss #od gos in :++!i#ation.taNa,.Data
• :%oid (sing /rsr%d na,s+a# na,s !i& Sst, '#a(s t$s *i!! #on)!i#t *it$ standard .NET na,s+a#s and r(ir rso!(tion
(sing t$ g!o'a! na,s+a# +r)i.
3 0(1MATTINGT$ )or,atting r(!s *r dsignd )or (s *it$ CQ. ;$r +ossi'!" t$ s$o(!d ' a++!id to ot$r !ang(ags CSS" a%aS#ri+t" t#. as *!!.
3.1 INDENTING AND S#ACING
• :n indnt is t*o s+a#sA it is n%r a ta'.
• Us a sing! s+a# a)tr a #o,,a .g. 't*n )(n#tion arg(,nts.
• T$r is no s+a# a)tr t$ !ading +arnt$sis>'ra#&t or ')or t$ #!osing Barnt$sis > 'ra#&t
• T$r is no s+a# 't*n a ,t$od na, and t$ !ading +arnt$sis" '(t t$r is a s+a# ')or t$ !ading +arnt$sis o) a )!o*
#ontro! stat,nt• Us a sing! s+a# to s(rro(nd all2 in)i o+ratorsA t$r is no s+a# 't*n a +r)i o+rator .g. / or / and its arg(,nt
• Do not (s s+a#ing to a!ign t+ ,,'rs on t$ sa, #o!(,n .g. as *it$ t$ ,,'rs o) an n(,ratd t+
3.2 C(MMENTS
24(CB C(MMENTS
?!o#& #o,,nts s$o(!d (s(a!! ' a%oidd. or ds#ri+tions (s o) t$ >>> #o,,nts to gi% CQ standard ds#ri+tions is r#o,,ndd.
;$n o( *is$ to (s '!o#& #o,,nts o( s$o(!d (s t$ )o!!o*ing st!
8/15/2019 DotNet Coding Standards
12/66
> Kin 1
Kin 2
8/15/2019 DotNet Coding Standards
13/66
Kin 3>
:s t$is *i!! st o)) t$ '!o#& %is(a!! )ro, #od )or t$ $(,an radr. :!trnati%! o( ,ig$t (s t$is o!d )as$iond C st! )or sing! !in#o,,nts" %n t$o(g$ it is not r#o,,ndd. In #as o( (s t$is st!" a !in 'ra& s$o(!d )o!!o* t$ #o,,nt" as it is $ard to s #od
+ro#dd ' #o,,nts in t$ sa, !in
> '!a$ '!a$ '!a$ >
?!o#& #o,,nts ,a ' (s)(! in rar #ass" r)r to t$ T#$Not PT$ )in :rt o) Co,,ntingP )or an a,+!. Gnra!! '!o#& #o,,nts
ar (s)(! )or #o,,nt o(t !arg s#tions o) #od.
3.4 SING4E 4INE C(MMENTS
-o( s$o(!d (s t$ >> #o,,nt st! to F#o,,nt o(tF #od. It ,a ' (sd )or #o,,nting s#tions o) #od too.
Sing! !in #o,,nts ,(st ' indntd to t$ indnt !%! *$n t$ ar (sd )or #od do#(,ntation. Co,,ntd o(t #od s$o(!d '
#o,,ntd o(t in t$ )irst !in to n$an# t$ %isi'i!it o) #o,,ntd o(t #od.
: r(! o) t$(,' sas t$at gnra!!" t$ !ngt$ o) a #o,,nt s$o(!d not #d t$ !ngt$ o) t$ #od +!aind ' too ,(#$" as t$is is an
indi#ation o) too #o,+!i#atd" +otntia!! '(gg" #od.
3.5 D(CUMENTATI(N C(MMENTS
In t$ .nt )ra,*or&" i#roso)t $as introd(#d a do#(,ntation gnration sst, 'asd on @K #o,,nts. T$s #o,,nts ar )or,a!!
sing! !in C ♯ #o,,nts #ontaining @K tags. T$ )o!!o* t$is +attrn )or sing! !in #o,,nts
>>> s(,,ar
>>> T$is is a #o,,nt )or #!ass>>> >s(,,ar
(!ti!in @K #o,,nts )o!!o* t$is +attrn
>>>#+tion #r)FtstE#+tionF
>>>T$is is an #+tion #o,,nt>>>t$ro*n )or tst #+tion
8/15/2019 DotNet Coding Standards
14/66
>>>>#+tion
:!! !ins ,(st ' +r#dd ' t$r s!as$s to ' a##+td as @K #o,,nt !ins. Tags )a!! into t*o #atgoris
8/15/2019 DotNet Coding Standards
15/66
Page 10 of
• Do#(,ntation it,s
• or,atting>)rn#ing
T$ )irst #atgor #ontains tags !i& s(,,ar" +ara, or >#+tion. T$s r+rsnt it,s t$at r+rsnt t$ !,nts o) a +rogra,Ps:BI *$i#$ ,(st ' do#(,ntd )or t$ +rogra, to ' (s)(! to ot$r +rogra,,rs. T$s tags (s(a!! $a% attri'(ts s(#$ as na, or #r)
as d,onstratd in t$ ,(!ti!in a,+! a'o%. T$s attri'(ts ar #$#&d ' t$ #o,+i!r" so t$ s$o(!d ' %a!id.
T$ !attr #atgor go%rns t$ !ao(t o) t$ do#(,ntation" (sing tags s(#$ as #od" !ist or +ara.
Do#(,ntation #an t$n ' gnratd (sing t$ Pdo#(,ntationP it, in t$ Qd%!o+ P'(i!dP ,n(. T$ do#(,ntation gnratd is in
8/15/2019 DotNet Coding Standards
16/66
Page 11 of
3.10 #A1ENTHESES
• CQ $as a di))rnt o+rator +r#dn# t$an Bas#a! or C" so o( #an *rit
#ontt n(!! VV #ontt.Co(nt 0
*it$o(t #on)(sing t$ #o,+i!r.
8/15/2019 DotNet Coding Standards
17/66
Page 12 of
?t*n do#(,ntd n(, %a!(sA (ndo#(,ntd ,a ' gro(+d togt$r
8/15/2019 DotNet Coding Standards
18/66
?t*n !ogi#a! gro(+s o) #od in a ,t$odA t$is notion is s('#ti% and ,or a ,attr o) st!. -o( s$o(!d (s ,+t !ins to
i,+ro% rada'i!it" '(t s$o(!d not o%r(s t$,.
?t*n t$ !ast !in o) #od in a '!o#& and a #o,,nt )or t$ nt '!o#& o) #od.
?t*n stat,nts t$at ar 'ro&n (+ into ,(!ti+! !ins.
?t*n a Qrgion tag and t$ )irst !in o) #od in t$at rgion. ?t*n t$ !ast !in o) #od in a rgion and t$ Qndrgion tag.
Do not +!a# an ,+t !in in t$ )o!!o*ing +!a#s
• :)tr anot$r ,+t !in
• ?t*n rtri%a! #od and $and!ing )or t$at #od. Instad" t$ s$o(!d ' )or,attd togt$r.
Itaada'!O'#t o' #ontt.indItaada'!O'#tA
i) o' n(!!
#ont5t.8#ordr.Kog6K%!.4ata!" String.4or,at6FError077A
rt(rn n(!!A
• ?t*n an !in and a !in t$at $as on! an o+ning or #!osing 'ra# on it i.. t$r s$o(!d ' no !ading or trai!ing n*!ins in a '!o#&
• ?t*n (ndo#(,ntd )i!ds (s(a!! +ri%atA i) t$r ar ,an s(#$ )i!ds" o( ,a (s ,+t !ins to gro(+ t$, ' +(r+os.
3.12 4INE 21EABING
?!an& !ins i,+ro% rada'i!it. T$ st o)) '!o#&s o) #od *$i#$ ar in t$,s!%s !ogi#a!! r!atd. T*o '!an& !ins s$o(!d a!*as ' (sd 't*n
• Kogi#a! s#tions o) a so(r# )i!
• C!ass and intr)a# d)initions tr on #!ass>intr)a# +r )i! to +r%nt t$is #as
On '!an& !in s$o(!d a!*as ' (sd 't*n
• t$ods
• Bro+rtis
• Ko#a! %aria'!s in a ,t$od and its )irst stat,nt
• Kogi#a! s#tions insid a ,t$od to i,+ro% rada'i!it
8/15/2019 DotNet Coding Standards
19/66
Not t$at '!an& !ins ,(st ' indntd as t$ *o(!d #ontain a stat,nt t$is ,a&s insrtion in t$s !ins ,(#$ asir.
8/15/2019 DotNet Coding Standards
20/66
3.13 INTE1'TE1M S#ACING
T$r s$o(!d ' a sing! s+a# a)tr a #o,,a or a s,i#o!on"
or a,+!
DonPt (s
%oid Tstt$oda"'"#
or
%oid Tstt$od a" '" #
#o,,ndd to Us
%oid Tstt$oda" '" #
3.14 TA24E 4IBE 0(1MATTING
: !ogi#a! '!o#& o) !ins s$o(!d ' )or,attd as a ta'!
string na, Fr. EdFA
int ,Ra!( 5A
Ki'rarUsr !i'Usr C!ass.GtN*UsrA
Us s+a#s )or t$ ta'! !i& )or,atting and not ta's '#a(s t$ ta'! )or,atting ,a !oo& strang in
s+#ia! ta' intnt !%!s.
3.15 7HITES#ACE 8(19 NE74INE 8(19 4INE21ABE USAGE SUMMA1@
• No !in s$o(!d #d 100 #$ara#trsA (s t$ !in'ra&ing r(!s !istd '!o* to 'ra& (+ a !in.
• Us !in'ra&ing on! *$n n#ssarA do not ado+t it as standard +ra#ti#.
• I) on or ,or !in'ra&s is r(ird" (s as )* as +ossi'!
• Kin'ra&ing s$o(!d o##(r at nat(ra! 'o(ndarisA t$ ,ost #o,,on s(#$ 'o(ndar is 't*n +ara,trs in a ,t$od #a!! or d)inition.
• Kins a)tr s(#$ a !in'ra& at s(#$ a 'o(ndar s$o(!d ' indntd.
8/15/2019 DotNet Coding Standards
21/66
• T$ s+arator .g. a #o,,a 't*n !,nts )or,attd onto ,(!ti+! !ins gos on t$ sa, !in a)tr t$ !,ntA t$ IDE is ,(#$
,or $!+)(! *$n )or,atting t$at *a.
• T$ ,ost nat(ra! !in'ra&ing 'o(ndar is o)tn ')or and a)tr a !ist o) !,nts. or a,+!" t$ )o!!o*ing ,t$od #a!! $as !in
'ra&s at t$ 'ginning and nd o) t$ +ara,tr !ist.
+o+!.DataSo(r# C(rrntCo,+an.E,+!os.GtKist
#onn#tion" ,taC!ass" Gti!tr" n(!!
A
• I) on o) t$ +ara,trs is ,(#$ !ongr" t$n o( add !in'ra&ing 't*n t$ +ara,trsA in t$at #as" all +ara,trs
ar )or,attd onto t$ir o*n !ins
+o+!.DataSo(r# C(rrntCo,+an.E,+!os.GtKist
#onn#tion"
,taC!ass"
Gti!trFG!o'a!.:++!i#ations.U+datr.BrsonKist.Sar#$F "
n(!!
A
• Not in t$ a,+!s a'o% t$at t$ +ara,trs ar indntd. I) t$ assign,nt or ,t$od #a!! *as !ongr" t$ *o(!d no !ongr )it on t$
sa, !in. In t$at #as" o( s$o(!d (s two !%!s o) indnting.
:++!i#ation.od!.+o+!.DataSo(r#
G!o'a!.:++!i#ationEn%iron,nt.C(rrntCo,+an.E,+!os.GtKist#onn#tion"
,taC!ass"
Gti!trFG!o'a!.:++!i#ations.U+datr.BrsonKist.Sar#$F "
n(!!
A
• I) t$r is a !ogi#a! gro(+ing )or +ara,trs" o( ,a a++! !in'ra&ing at t$os 'o(ndaris instad 'ra&ing t$ a!!onon!in or a#$
onitso*n!in r(! statd a'o%. or a,+!" t$ )o!!o*ing ,t$od s+#i)is Cartsian #oordinats
8/15/2019 DotNet Coding Standards
22/66
Go,tr.B!otIn?o
FG!o'a!.:++!i#ations.ain;indo*F"
to+K)t.@" to+K)t.-"
'otto,ig$t.@" 'otto,ig$t.-
8/15/2019 DotNet Coding Standards
23/66
A
4 NAMING
T$ na,ing r(!s *r dsignd )or (s *it$ CQ. ;$r +ossi'!" t$ s$o(!d ' a++!id to !,nts o) ot$r !ang(ags CSS"
a%aS#ri+t" t#. as *!!. o!!o* a!! .NET ra,*or& Dsign G(id!ins )or 'ot$ intrna! and trna! ,,'rs.
8/15/2019 DotNet Coding Standards
24/66
4.3 GENE1A4 1U4ES
• Na,s ar in USEng!is$ .g. (s /#o!or instad o) /#o!o(r.
• Na,s #on)or, to Eng!is$ gra,,ati#a! #on%ntions .g. (s I,+orta'!Data'as instad o) Data'asI,+orta'!.
• Na,s s$o(!d ' as s$ort as +ossi'! *it$o(t !osing ,aning.
• Br)r *$o! *ords or sti#& to +rd)ind s$ort )or,s or a''r%iations o) *ords
• a& s(r to #a+ita!i #o,+o(nd *ords #orr#t!A i) t$ *ord is not $+$natd" t$n it dos not nd a #a+ita! !ttr in t$ #a,! or
Bas#a!#asd )or,. or a,+!" /,tadata is *rittn as tadata in Bas#a!#as" not taData.
• :#ron,s s$o(!d ' Bas#a!#as as *!! .g. /@,! or /S! (n!ss t$ ar on! t*o !ttrs !ong. :#ron,s at t$ 'ginning o) a
#a,!#as idnti)ir ar a!*as a!! !o*r#as.
• Idnti)irs di))ring on! ' #as ,a ' d)ind *it$in t$ sa, s#o+ on! i) t$ idnti) di))rnt !ang(ag !,nts .g. a !o#a!
%aria'! and a +ro+rt.
+('!i# %oid U+datKngt$int n*Kngt$" 'oo! r)rs$Ri*s
int !ngt$ Kngt$A
• -o( ,a not (s idnti)irs t$at ar &*ords in CQA nit$r ,a o( (s t$ Ys,'o! to t(rn a &*ord into a %a!id idnti)ir.
4.4 C(44ISI(N AND MATCHING
• Do not na, an !,nt *it$ t$ sa, idnti)ir as its #ontaining !,nt .g. don‟t #rat a stati# #!ass na,d E+rssions *it$in a
na,s+a# #a!!d E+rssions
•
Sin# CQ a!!o*s it" o( s$o(!d (s t$ sa, idnti)ir )or a +ro+rt as its t+ i) t$at is t$ ,ost a++ro+riat na, in t$at #onttt$is is o)tn t$ #as *it$ n(, +ro+rtis
4.5 CA#ITA4IATI(N
T$ )o!!o*ing ta'! !ists t$ #a+ita!iation and na,ing r(!s )or di))rnt !ang(ag !,nts. Bas#a!#as #a+ita!is %r indi%id(a! *ord
*it$in an idnti)ir" in#!(ding t$ )irst on. Ca,!#as #a+ita!is a!! '(t t$ )irst *ord in an idnti)ir.
4.6 CA#ITA4IATI(N ST@4ES
#ASCA4 CASING
8/15/2019 DotNet Coding Standards
25/66
T$is #on%ntion #a+ita!is t$ )irst #$ara#tr o) a#$ *ord as in TstCo(ntr.
8/15/2019 DotNet Coding Standards
26/66
4.8 CAME4 CASING
T$is #on%ntion #a+ita!is t$ )irst #$ara#tr o) a#$ *ord #+t t$ )irst on. E.g. tstCo(ntr.
4.9 U##E1 CASE
On! (s a!! (++r #as )or idnti)irs i) it #onsists o) an a''r%iation *$i#$ is on or t*o #$ara#trs !ong" idnti)irs o) t$r or ,or
#$ara#trs s$o(!d (s Bas#a! Casing instad.
or Ea,+!
+('!i# #!ass at$
+('!i# const do('! BI
3.14A +('!i# #onst string E
Fasd)FA
+('!i# #onst int )ign?a(,N(,'r 91A
4.10 NAMING GUIDE4INES
Gnra!! t$ (s o) (ndrs#or #$ara#trs insid na,s and na,ing a##ording to t$ g(id!ins )or
8/15/2019 DotNet Coding Standards
27/66
4.12 INTE10ACE NAMING GUIDE4INES
• Na, intr)a#s *it$ no(ns or no(n +$rass or ad#ti%s ds#ri'ing '$a%ior. Ea,+! ICo,+onnt or IEn(,'ra'!
8/15/2019 DotNet Coding Standards
28/66
• Us Bas#a! Casing
• Us I as +r)i )or t$ na," it is )o!!o*d ' a #a+ita! !ttr )irst #$ar o) t$ intr)a# na,
4.13 ENUM NAMING GUIDE4INES• Us Bas#a! Casing )or n(, %a!( na,s and n(, t+ na,s
• Don‟t +r)i or s())i a n(, t+ or n(, %a!(s
• Us sing(!ar na,s )or n(,s
• Us +!(ra! na, )or 'it )i!ds.
4.14 1EAD(N4@ AND C(NST 0IE4D NAMES
• Na, stati# )i!ds *it$ no(ns" no(n +$rass or a''r%iations )or no(ns
• Us Bas#a! Casing
4.15 #A1AMETE1
8/15/2019 DotNet Coding Standards
29/66
• t$od na,s s$o(!d not r+at in)or,ation )ro, t$ n#!osing t+. or a,+!" an intr)a# na,d Issags s$o(!d not $a% a
,t$od na,d KogssagA instad na, t$ ,t$od Kog.
8/15/2019 DotNet Coding Standards
30/66
• Stat *$at a ,t$od dosA do not ds#ri' t$ +ara,trs !t #od#o,+!tion and t$ signat(r do t$at )or o(.
• t$ods t$at rt(rn %a!(s s$o(!d indi#at t$is in t$ir na," !i& GtKist" GtIt, or CratD)a(!tData'as. T$o(g$ t$r is
gar'ag #o!!#tion in CQ" o( s$o(!d sti!! (s Gt to indi#at rtri%a! o) a !o#a! %a!( and Crat to indi#at a )a#tor ,t$od" *$i#$
a!*as #rats a n* r)rn#. or a,+!" instad o) *riting
+('!i# IDataKistGnri#O'#t GtKistItaC!ass #!s
rt(rn Ri*:++!i#ation.:++!i#ation.CratCont5tGnri#O'9#t6#!s7A
-o( s$o(!d *rit
+('!i# IDataKistGnri#O'#t CratKistItaC!ass #!s
rt(rn Ri*:++!i#ation.:++!i#ation.CratCont5tGnri#O'9#t6#!s7A
• :%oid d)ining %rt$ing as a no(n or a ,anagr. Br)r na,s t$at ar !ogi#a!! r!%ant" !i& issi!.Ka(n#$ rat$r t$an
issi!Ka(n#$r.E#(t,issi!.
• t$ods t$at st a sing! +ro+rt %a!( s$o(!d 'gin *it$ t$ %r' St.
4.18 #1(#E1T@ NAMES
• Na, +ro+rtis (sing no(ns or no(n +$rass
• Us Bas#a! Casing
• Considr na,ing a +ro+rt *it$ t$ sa, na, as it s‟ t+
• Bro+rtis s$o(!d ' no(ns or ad#ti%s
• Br+nd /Is to t$ na, )or ?oo!an +ro+rtis on! i) t$ intnt is (n#!ar *it$o(t it. T$ nt a,+! s$o*s s(#$ a #as
+('!i# 'oo! E,+t gtA
+('!i# 'oo! IsE,+t gtA
:!t$o(g$ it‟s a +ro+rt not a ,t$od" t$ )irst a,+! ,ig$t sti!! ' intr+rtd as a %r' rat$r t$an an ad#ti%. T$ s#ond a,+!
adds t$ %r' /Is to a%oid #on)(sion" '(t 'ot$ )or,(!ations ar a##+ta'!.
8/15/2019 DotNet Coding Standards
31/66
• : +ro+rt‟s 'a#&ing )i!d i) +rsnt ,(st ' an (ndrs#or )o!!o*d ' t$ na, o) t$ +ro+rt in #a,! #as.
• Us #o,,on na,s" !i& It, or Ra!(" )or a##ssing t$ #ntra! +ro+rt o) a t+
8/15/2019 DotNet Coding Standards
32/66
Page 20 of
• Do not in#!(d t+ in)or,ation in +ro+rt na,s. or a,+!" )or a +ro+rt o) t+ Ita!ation" (s t$ na, !ation instad
o) t$ na, ta!ation
• a& t$ idnti)ir as s$ort as +ossi'! *it$o(t !osing in)or,ation. or a,+!" i) a #!ass na,d IRi*Contt $as a +ro+rt o) t+
IRi*Contt
8/15/2019 DotNet Coding Standards
33/66
Page 20 of
or, s())i @@@or,
Gro(+?o gr+
I,agKist i,!Ka'! !'
Kist?o !st
KistRi* !%*
n( ,n(
n(It, ,n(
Noti)i#ationI#on n)
Ban! +n!
Bi#t(r?o +#t
Brogrss?ar +rg
adio?(tton rad
S+!ittr s+!
Stat(s?ar sts
Ta'Contro! ta'
Ta'Bag ta'
Tt?o t'
Ti,r t,r
TrRi* t%*
or a,+!" )or t$ /i! Z Sa% ,n( o+tion" t$ /Sa% n(It, *o(!d ' #a!!d /,n(i!Sa%.
4.21 CA#ITA4IATI(N SUMMA1@
Identifier Casin! Na*in! Str%ct%re E?a*ple
Class Str%ct%re
Bas#a!Casing No(n+('!i# #!ass Co,+!N(,'r ...
+('!i# str(#t Co,+!tStr(#t ...
8/15/2019 DotNet Coding Standards
34/66
Page 20 of
Na*espace Bas#a!Casing No(nDo not (s t$ sa, na,
)or a na,s+a# and a t+ int$at na,s+a#.
na,s+a# i#roso)t.Sa,+!.;indo*s7
En%*eration Bas#a!Casing No(n Do na, )!ag n(,s *it$
+!(ra! no(ns or no(n +$rassand si,+! n(,s *it$ sing(!ar no(ns or no(n +$rass.
[!ags\+('!i# n(, Conso!odi)irs :!t" Contro!
Method Bas#a!Casing Rr' or Rr' +$ras +('!i# %oid Brint ...+('!i# %oid Bro#ssIt, ...
#%blic
#ropert
Bas#a!Casing No(n or :d#ti%
Do na, #o!!#tion +ro+ritis *it$ a +!(ra! +$ras ds#ri'ing t$ it,s int$ #o!!#tion" as o++osd to a sing(!ar +$ras )o!!o*d ' /Kist or /Co!!#tion.
Do na, ?oo!an
+ro+ritis *it$ an a))ir,ati% +$ras CanS&instad o) CantS&.O+tiona!!" o( #an a!so +r)i ?oo!an +ro+rtis *it$
/Is" /Can" or /
8/15/2019 DotNet Coding Standards
35/66
Page 20 of
tns.Do not (s /?)or or /:)tr +r)is or +ost)is
to indi#at +r and +ost %nts.
>> : #!os %nt t$at is raisd ')ora *indo* is #!osd.+('!i# %nt ;indo*C!osing
Dele!ate Bas#a!Casing Do add t$ s())i]E%nt
8/15/2019 DotNet Coding Standards
36/66
Page 20 of
Do +r)i ds#ri+ti% t+
+ara,tr na,s *it$ T. @o% sho%ld (sing T as t$
t+ +ara,tr na, )or t+s *it$ on sing!!ttr t+ +ara,tr.
1eso%rce Bas#a!Casing No(n Do +ro%id ds#ri+ti%
rat$r t$an s$ort idnti)irs.^+ t$, #on#is *$r +ossi'!" '(t do not sa#ri)i#rada'i!it )or s+a#.
Do (s on! a!+$an(,ri#
#$ara#trs and (ndrs#ors inna,ing rso(r#s.
:rg(,ntE#+tionIn%a!idNa,
5 DEC4A1ATI(NS
5.1 NUM2E1 (0 DEC4A1ATI(NS #E1 4INE
On d#!aration +r !in is r#o,,ndd sin# it n#o(rags #o,,nting1. In ot$r *ords"
int !%!A >> indntation !%!
int siA >> si o) ta'!
Do not +(t ,or t$an on %aria'! or %aria'!s o) di))rnt t+s on t$ sa, !in *$n d#!aring t$,.
Ea,+!
int a" 'A >>;$at is PaPX ;$at dos P'P stand )orX
T$ a'o% a,+! a!so d,onstrats t$ dra*'a#&s o) nono'%io(s %aria'! na,s. ? #!ar *$n na,ing %aria'!s.
5.2 INITIA4IATI(N
Tr to initia!i !o#a! %aria'!s as soon as t$ ar d#!ard. or a,+!
8/15/2019 DotNet Coding Standards
37/66
string na, Ki'rarUsr.(!!Na,A
or
int #(rrS# DatTi,.No*.i!!is#ondA
Not I) o( initia!i a dia!og tr to (s t$ (sing stat,nt
(sing O+ni!Dia!og o+ni!Dia!og n* O+ni!Dia!og
...
5.3 C4ASS AND INTE10ACE DEC4A1ATI(NS
;$n #oding CQ #!asss and intr)a#s" t$ )o!!o*ing )or,atting r(!s s$o(!d ' )o!!o*d
• No s+a# 't*n a ,t$od na, and t$ +arnt$sis FF starting its +ara,tr !ist.
• T$ o+ning 'ra# FF a++ars in t$ nt !in a)tr t$ d#!aration stat,nt.
• T$ #!osing 'ra# F F starts a !in ' its!) indntd to ,at#$ its #orrs+onding o+ning 'ra#.
or a,+! #!ass Sa,+! C!ass" IIntr)a#
int ,IntA
+('!i# Sa,+!int ,Int
t$is.,Int ,IntA
%oid In#
__,IntA
%oid E,+tt$od
8/15/2019 DotNet Coding Standards
38/66
8/15/2019 DotNet Coding Standards
39/66
6 STATEMENTS
6.1 SIM#4E STATEMENTS
Ea#$ !in s$o(!d #ontain on! on stat,nt.
6.2 1ETU1N STATEMENTS
: rt(rn stat,nt s$o(!d not (s o(tr ,ost +arnt$ss.
DonPt (s
rt(rn n n _ 1 > 2A
#o,,ndd to Us
rt(rn n n _ 1 > 2A
7 E11(1S AND E>CE#TI(NS
7.1 E>CE#TI(N TH1(7ING
Do r+ort #(tion )ai!(rs ' t$ro*ing #+tions. E#+tions ar t$ +ri,ar ,ans o) r+orting rrors in )ra,*or&s. I) a ,,'r
#annot s(##ss)(!! do *$at it is dsignd to do" it s$o(!d ' #onsidrd an #(tion )ai!(r and an #+tion s$o(!d ' t$ro*n. Do not
rt(rn rror #ods.
Do t$ro* t$ ,ost s+#i)i# t$ ,ost dri%d #+tion t$at ,a&s sns. or a,+!" t$ro* :rg(,ntN(!!E#+tion and not its 'as t+
:rg(,ntE#+tion i) a n(!! arg(,nt is +assd. T$ro*ing Sst,.E#+tion as *!! as #at#$ing Sst,.E#+tion is nar! a!*as t$ *rong
t$ing to do.
Do not (s #+tions )or t$ nor,a! )!o* o) #ontro!" i) +ossi'!. E#+t )or sst, )ai!(rs and o+rations *it$ +otntia! ra# #onditions"
o( s$o(!d *rit #od t$at dos not t$ro* #+tions. or a,+!" o( #an #$#& +r#onditions ')or #a!!ing a ,t$od t$at ,a )ai! and
t$ro* #+tions. or a,+!"
>> CQ sa,+!i) #o!!#tion n(!! VV #o!!#tion.IsadOn!
#o!!#tion.:ddadditiona!N(,'rA
8/15/2019 DotNet Coding Standards
40/66
Do not t$ro* #+tions )ro, #+tion )i!tr '!o#&s. ;$n an #+tion )i!tr raiss an #+tion" t$ #+tion is #a(g$t ' t$ CK"
and t$ )i!tr rt(rns )a!s. T$is '$a%ior is indisting(is$a'! )ro, t$ )i!tr #(ting and rt(rning )a!s +!i#it! and is t$r)or %r
di))i#(!t to d'(g.
P R?.NET sa,+!P T$is is 'ad dsign. T$ #+tion )i!tr ;$n #!a(s
P ,a t$ro* an #+tion *$n t$ InnrE#+tion +ro+rt
P rt(rns n(!!
Tr
...Cat#$ :s :rg(,ntE#+tion W;$n .InnrE5#+tion.ssag.Starts;it$6F4i!F7
...
End Tr
Do not +!i#it! t$ro* #+tions )ro, )ina!! '!o#&s. I,+!i#it! t$ro*n #+tions rs(!ting )ro, #a!!ing ,t$ods t$at t$ro* ar
a##+ta'!.
7.2 E>CE#TI(N HAND4ING
@o% sho%ld not s*a!!o* rrors ' #at#$ing nons+#i)i# #+tions" s(#$ as Sst,.E#+tion" Sst,.Sst,E#+tion" and so on in .NET
#od. Do #at#$ on! s+#i)i# rrors t$at t$ #od &no*s $o* to $and!. -o( s$o(!d #at#$ a ,or s+#i)i# #+tion" or rt$ro* t$ gnra!
#+tion as t$ !ast stat,nt in t$ #at#$ '!o#&. T$r ar #ass *$n s*a!!o*ing rrors in a++!i#ations is a##+ta'!" '(t s(#$ #ass ar
rar.
Good
tr
...
#at#$Sst,.N(!!)rn#E#+tion #
...
8/15/2019 DotNet Coding Standards
41/66
#at#$6Sst,.:rg(,ntO(tO)8angE5#+tion 5#7
...
8/15/2019 DotNet Coding Standards
42/66
#at#$Sst,.In%a!idCastE#+tion #
...
?ad
tr
...#at#$ E#+tion
...
Do +r)r (sing an ,+t t$ro* *$n #at#$ing and rt$ro*ing an #+tion. T$is is t$ 'st *a to +rsr% t$ #+tion #a!! sta#&.
Good
tr
... >> Do so, rading *it$ t$ )i!#at#$
)i!.Bosition +ositionA >> Un*ind on )ai!(r
t$ro*A >> t$ro*
?ad
tr
... >> Do so, rading *it$ t$ )i!
8/15/2019 DotNet Coding Standards
43/66
#at#$ E#+tion
)i!.Bosition +ositionA >> Un*ind on )ai!(r
8/15/2019 DotNet Coding Standards
44/66
t$ro* A >> t$ro*
8 1ES(U1CE C4EANU#Do not )or# gar'ag #o!!#tions *it$ GC.Co!!#t.
8.1 T1@'0INA44@ 24(CB
Do (s tr)ina!! '!o#&s )or #!an(+ #od and tr#at#$ '!o#&s )or rror r#o%r #od. Do not (s #at#$ '!o#&s )or #!an(+ #od. Us(a!!"
t$ #!an(+ !ogi# ro!!s 'a#& rso(r# +arti#(!ar!" nati% rso(r# a!!o#ations. or a,+!"
i!Stra, stra, n(!!A
tr
stra, n* i!Stra,...A
...
)ina!!
i) stra, n(!!
stra,.C!osA
CQ and R?.NET +ro%id t$ (sing stat,nt t$at #an ' (sd instad o) +!ain tr)ina!! to #!an (+ o'#ts i,+!,nting t$
IDis+osa'! intr)a#.
>> CQ sa,+!
(sing i!Stra, stra, n* i!Stra,...
...
8/15/2019 DotNet Coding Standards
45/66
8/15/2019 DotNet Coding Standards
46/66
Page 30 of
an !ang(ag #onstr(#ts ,it tr)ina!! '!o#&s a(to,ati#a!! )or o(. Ea,+!s ar CQ>R? s‟ (sing stat,nt" CQ ‟s !o#&
stat,nt" R?‟s Sn#Ko#& stat,nt" CQ ‟s )ora#$ stat,nt" and R?‟s 4or Ea#$ stat,nt.
8.2 2ASIC DIS#(SE #ATTE1N
T$ 'asi# i,+!,ntation o) t$ +attrn in%o!%s i,+!,nting t$ Sst,.IDis+osa'! intr)a# and d#!aring t$ Dis+os'oo! ,t$od
t$at i,+!,nts a!! rso(r# #!an(+ !ogi# to ' s$ard 't*n t$ Dis+os ,t$od and t$ o+tiona! )ina!ir. B!as not t$at t$is
s#tion dos not dis#(ss +ro%iding a )ina!ir. ina!ia'! t+s ar tnsions to t$is 'asi# +attrn and ar dis#(ssd in t$ nt s#tion.
T$ )o!!o*ing a,+! s$o*s a si,+! i,+!,ntation o) t$ 'asi# +attrn
+('!i# #!ass Dis+osa'!so(r# :!!o#ats t$ nati% rso(r#
+('!i# %oid DoSo,t$ing
i) dis+osd
t$ro* n* O'#tDis+osdE#+tion...A
>> No* #a!! so, nati% ,t$ods (sing t$ rso(r#
...
+('!i# %oid Dis+os
Dis+ostr(A
GC.S(++rssina!it$isA
8/15/2019 DotNet Coding Standards
47/66
Page 30 of
8/15/2019 DotNet Coding Standards
48/66
Page 31 of
+rot#td %irt(a! %oid Dis+os'oo! dis+osing
>> Brot#t )ro, 'ing #a!!d ,(!ti+! ti,s.
i) dis+osd
rt(rnA
i) dis+osing
>> C!an (+ a!! ,anagd rso(r#s.
i) rso(r# n(!!
rso(r#.Dis+osA
dis+osd tr(A
Do i,+!,nt t$ ?asi# Dis+os Battrn on t+s #ontaining instan#s o) dis+osa'! t+s.
Do tnd t$ ?asi# Dis+os Battrn to +ro%id a )ina!ir on t+s $o!ding rso(r#s t$at nd to ' )rd +!i#it! and t$at do not $a%
)ina!irs. or a,+!" t$ +attrn s$o(!d ' i,+!,ntd on t+s storing (n,anagd ,,or '())rs.
@o% sho%ld i,+!,nt t$ ?asi# Dis+os Battrn on #!asss t$at t$,s!%s don‟t $o!d (n,anagd rso(r#s or dis+osa'! o'#ts '(t ar
!i&! to $a% s('t+s t$at do. : grat a,+! o) t$is is t$ Sst,.IO.Stra, #!ass. :!t$o(g$ it is an a'stra#t 'as #!ass t$at dosn t‟ $o!d
an rso(r#s" ,ost o) its s('#!asss do and '#a(s o) t$is" it i,+!,nts t$is +attrn.
Do d#!ar a +rot#td %irt(a! %oid Dis+os'oo! dis+osing ,t$od to #ntra!i a!! !ogi# r!atd to r!asing (n,anagd rso(r#s. :!!
rso(r# #!an(+ s$o(!d o##(r in t$is ,t$od. T$ ,t$od is #a!!d )ro, 'ot$ t$ )ina!ir and t$ IDis+osa'!.Dis+os ,t$od. T$
8/15/2019 DotNet Coding Standards
49/66
Page 32 of
+ara,tr *i!! ' )a!s i) 'ing in%o&d )ro, insid a )ina!ir. It s$o(!d ' (sd to ns(r an #od r(nning d(ring )ina!iation is not a##ssing
ot$r )ina!ia'! o'#ts. Dtai!s o) i,+!,nting )ina!irs ar ds#ri'd in t$ nt s#tion.
+rot#td %irt(a! %oid Dis+os'oo! dis+osing
8/15/2019 DotNet Coding Standards
50/66
>> Brot#t )ro, 'ing #a!!d ,(!ti+! ti,s.
i) dis+osd
rt(rnA
i) dis+osing
>> C!an (+ a!! ,anagd rso(r#s.
i) rso(r# n(!!
rso(r#.Dis+osA
dis+osd tr(A
Do i,+!,nt t$ IDis+osa'! intr)a# ' si,+! #a!!ing Dis+ostr( )o!!o*d ' GC.S(++rssina!it$is. T$ #a!! to S(++rssina!i
s$o(!d on! o##(r i) Dis+ostr( #(ts s(##ss)(!!.
+('!i# %oid Dis+os
Dis+ostr(A
GC.S(++rssina!it$isA
Do not ,a& t$ +ara,tr!ss Dis+os ,t$od %irt(a!. T$ Dis+os'oo! ,t$od is t$ on t$at s$o(!d ' o%rriddn ' s('#!asss.
-o% sho%ld not t$ro* an #+tion )ro, *it$in Dis+os'oo! #+t (ndr #riti#a! sit(ations *$r t$ #ontaining +ro#ss $as 'n
#orr(+td !a&s" in#onsistnt s$ard stat" t#.. Usrs +#t t$at a #a!! to Dis+os *o(!d not rais an #+tion. or a,+!" #onsidr
t$ ,an(a! tr)ina!! in t$is CQ sni++t
8/15/2019 DotNet Coding Standards
51/66
Ttadr tr n* Stra,adri!.O+nadF)oo.ttFA
tr
8/15/2019 DotNet Coding Standards
52/66
>> Do so, st()) )ina!!
tr.Dis+osA>> or st())
I) Dis+os #o(!d rais an #+tion" )(rt$r )ina!! '!o#& #!an(+ !ogi# *i!! not #(t. To *or& aro(nd t$is" t$ (sr *o(!d nd to *ra+
%r #a!! to Dis+os *it$in t$ir )ina!! '!o#& in a tr '!o#&" *$i#$ !ads to %r #o,+! #!an(+ $and!rs. I) #(ting a Dis+os'oo!
dis+osing ,t$od" n%r t$ro* an #+tion i) dis+osing is )a!s. Doing so *i!! tr,inat t$ +ro#ss i) #(ting insid a )ina!ir #ontt.
Do t$ro* an O'#tDis+osdE#+tion )ro, an ,,'r t$at #annot ' (sd a)tr t$ o'#t $as 'n dis+osd.
+('!i# #!ass Dis+osa'!so(r# > No* #a!! so, nati% ,t$ods (sing t$ rso(r#
...
+rot#td %irt(a! %oid Dis+os'oo! dis+osing
i) dis+osd
8/15/2019 DotNet Coding Standards
53/66
rt(rnA
8/15/2019 DotNet Coding Standards
54/66
>> C!an(+...dis+osd tr(A
8.3 0INA4IA24E T@#ES
ina!ia'! t+s ar t+s t$at tnd t$ ?asi# Dis+os Battrn ' o%rriding t$ )ina!ir and +ro%iding )ina!iation #od +at$ in
t$ Dis+os'oo! ,t$od. T$ )o!!o*ing #od s$o*s an a,+! o) a )ina!ia'! t+
+('!i# #!ass Co,+!so(r# Dis+osa'! $and! to a rso(r#
+('!i# Co,+!so(r#
8/15/2019 DotNet Coding Standards
55/66
`Co,+!so(r#
8/15/2019 DotNet Coding Standards
56/66
Dis+os)a!sA
+('!i# %oid Dis+os
Dis+ostr(A
GC.S(++rssina!it$isA
+rot#td %irt(a! %oid Dis+os'oo! dis+osing
>> Brot#t )ro, 'ing #a!!d ,(!ti+! ti,s.
i) dis+osd
rt(rnA
i) dis+osing
>> C!an (+ a!! ,anagd rso(r#s.
i) rso(r# n(!!
rso(r#.Dis+osA
>> C!an (+ a!! nati% rso(r#s.
!as?())r'())rA
dis+osd tr(A
Do ,a& a t+ )ina!ia'!" i) t$ t+ is rs+onsi'! )or r!asing an (n,anagd rso(r# t$at dos not $a% its o*n )ina!ir. ;$n
i,+!,nting t$ )ina!ir" si,+! #a!! Dis+os)a!s and +!a# a!! rso(r# #!an(+ !ogi# insid t$ Dis+os'oo! dis+osing ,t$od.
8/15/2019 DotNet Coding Standards
57/66
+('!i# #!ass Co,+!so(r#
8/15/2019 DotNet Coding Standards
58/66
...`Co,+!so(r#>> s(,,ar
>>> +rsnts a *ra++r #!ass )or a +i+ $and!.>>> >s(,,ar
[S#(ritCriti#a!S#(ritCriti#a!S#o+.E%rt$ing"
8/15/2019 DotNet Coding Standards
59/66
8/15/2019 DotNet Coding Standards
60/66
'astr(
+('!i# Sa)Bi+
8/15/2019 DotNet Coding Standards
61/66
'as.St
8/15/2019 DotNet Coding Standards
62/66
[8!ia'i!itContra#t6Consistn#.;i!!NotCorr(+tStat" Cr.S(##ss7"
D!!I,+ortF&rn!32.d!!F" C$arSt C$arSt.:(to" StKastError tr(\ +ri%at stati# trn IntBtr Ko#a!rIntBtr $,A
+rot#td o%rrid 'oo! !as
8/15/2019 DotNet Coding Standards
63/66
Dis+os)a!sA
8/15/2019 DotNet Coding Standards
64/66
+('!i# %oid Dis+os
Dis+ostr(A
GC.S(++rssina!it$isA
+rot#td %irt(a! %oid Dis+os'oo! dis+osing
>> ...
+('!i# #!ass Dis+osa'!S('#!ass Dis+osa'!?as
+rot#td o%rrid %oid Dis+os'oo! dis+osing
tr
i) dis+osing
>> C!an (+ ,anagd rso(r#s.
>> C!an (+ nati% rso(r#s.
)ina!!
9 C(MM(N (NE 4INE1S
'as.Dis+osdis+osingA
8/15/2019 DotNet Coding Standards
65/66
1. Us !ong na,s )or %aria'!s
2. Initia!i %aria'!s at t$ ti, o) d#!aration
8/15/2019 DotNet Coding Standards
66/66
Page 40 of
3. Us .E%als instad o)
4. Us #onditiona! o+rator X instad o) I
5. Us XX *$n +#ting t$ n(!! r)rn#
6. Us .Kngt$ #o,+arison to %a!idat string *it$ %a!(s7. Us String?(i!dr instad o) strings #on#atnation
8. Us String?(i!dr r+!a# instad o) string.+!a#
9. Us sing! !in assign,nts )or #o,,on %a!(s
10. :%oid tr #at#$ as ,(#$ +ossi'!
11. Organi Usings and r,o% V sort t$ r)rn#s
12. Us *$it s+a#s *it$in %r +rssion
13. S+arat (sr ,t$ods )ro, sst, gnratd ,t$ods. Us o) gion
14. Gi% :(t$or dtai!s on %r +ag
15. aintain t$ $istor o) ,odi)i#ation
16. ;rit t$ #od in as s,a!! r(sa'! ,t$ods as +ossi'!.
17. N%r assign o'#ts to n(!! *$n t$ ar *it$in t$ !oo+
18. I) o( #an (s t$ GC.^+:!i%" ,a& t$ 'st (s o) it
19. Tr to s+arat t$ ina!i ,t$od into a di))rnt #!ass and instantiat in t$ #a!!r #!ass t$at i,+!,nts t$ IDis+osa'! intr)a#
20. a& (s o) ;a&)rn# to a%oid t$ ,(!ti+! #onn#tions > rads )ro, stati# #ontnt
21. Us int.TrBars" instad o) Con%rt.ToInt or int.Bars N%r V E%r Tr(st
t$ Usr In+(t" do (s En#oding *$r %r n#ssar
Top Related