Avatar billede heidi_j Nybegynder
12. november 2004 - 11:10 Der er 8 kommentarer

Visual Studio .Net 2003, C# og auto-generering af declarations

Jeg har en Webapplication, skrevet i c#.net og med en del webforms - i disse webforms, når jeg dropper div. components, bliver der automatisk genereret declarations i min codebehind, der refererer til mit component på selve webformen i aspx-filen...

Dette er også fint nok, og meget nyttet så man ikke selv skal tampe alt det skidt ind, men i mit tilfælde vælger jeg at delcare dem som "internal" i stedet for "protected" objecter (da jeg så kan bruge dem som peoperties og lave nogle get/set-metoder til dem (og tilfredsstiller f.eks. FxCop på den måde)...

Dette virker også fint, men så snart jeg går i design-mode igen på min webform, laver den _nye_ instancer af dem i min code-behind, således jeg har mine egne "internal" og så nogle auto-generet "protected"... Dette er pisse irriterende, da jeg så får både compiler-warnings om dobbelt-instanser, samt konstant skal slette disse auto-genererede declarations...

Hvor kan jeg slå fra, så den ikke automatisk laver disse auto-ting i C#.net?

På forhånd tak...
Avatar billede bennytordrup Nybegynder
12. november 2004 - 11:13 #1
Du er nødt til at lave dem protected - ellers kan selve Web interfacet ikke få adgang til dem - det nedarver af den klasse, du har i code behind.
Avatar billede heidi_j Nybegynder
12. november 2004 - 11:19 #2
Jeg tror selv jeg har fundet en løsning på hvorfor den lavede egne instanser hele tiden;

Id på mit object på webform: MenuPlaceholder
Id på mit object i codebehind (internal): menuPlaceholder
Id på mit object i codebehind (protected, med properties: MenuPlaceholder

Jeg ændrede object-id'et på min webform til menuPlaceholder, og vupti overskrev den ikke min internal (som den jo heller ikke gjorde før - det var simpelthen to forskellige ID'er...)
Avatar billede heidi_j Nybegynder
12. november 2004 - 11:21 #3
For lige at forklare:

class blabla {
  ...
  internal System.Web.UI.WebControls.PlaceHolder newsPlaceholder;

  protected System.Web.UI.WebControls.PlaceHolder NewsPlaceholder
  {
    get { return newsPlaceholder; }
    set { newsPlaceholder = value; }
  }
Avatar billede bennytordrup Nybegynder
12. november 2004 - 11:26 #4
Hold dig fra den metode - det harmonerer ikke med designeren.

Hvorfor vil du lave det sådan????
Avatar billede heidi_j Nybegynder
12. november 2004 - 11:40 #5
Jeg følger bare Microsofts design-regler for kode nøje...
En del af den virker meget underlig (især fordi designeren ikke understøtter Microsofts egen guidelines for kode) - f.eks. voilater det FxCops DesignRules som en error, hvis jeg ikke gør det sådan:

http://www.gotdotnet.com/team/fxcop/docs/rules/DesignRules/TypesDoNotHavePublicInstanceFields.html
Avatar billede bennytordrup Nybegynder
12. november 2004 - 11:55 #6
Det er jo bare typisk Microsoft at udvikle design-regler, som de ikke selv overholder.
Avatar billede burningice Nybegynder
12. november 2004 - 19:36 #7
det er da noget værre flueknepperi... :P der er da flere steder i frameworket hvor at der er eksempler på public Fields... f.eks. er String.Empty ikke en property men et public field.
Avatar billede arne_v Ekspert
12. november 2004 - 21:26 #8
Reglen findes både i C++, Java og C#. Og er almindeligt accepteret.

Eksemplet med String.Empty modbeviser ikke noget da reglen ikke gælder
for const/final/readonly felter.

Efter min bedste mening er .aspx.cs-.aspx lidt speciel og måske burde fxcop
acceptere det for dem.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester