Avatar billede ameq Nybegynder
12. juni 2005 - 10:18 Der er 11 kommentarer og
1 løsning

Hvordan bruger man using i c#

Hej
Nu har jeg set i flere eks. på nettet hvor man bruger
using(variable = etellerandet)
{
også noget kode
}

Hvad bruger man det til?
og hvordan virker det lige?
Avatar billede nielle Nybegynder
12. juni 2005 - 10:25 #1
using kræver for det første at den variabeltype man bruger det sammen med er defineret til at arve fra IDisposable. Dette betyder at den også har implementeret en Dispose-metode som står for at lave en del rengøring når variablen slettes.

Når du skriver:

using (variable = etellerandet)
{
    også noget kode
}

- så betyder det blot at variablen ”variable” oprettes i forbindelse med using-deklarationen og at den slettes igen lige så snart at den afsluttende tuborg passeres.
Avatar billede dr_chaos Nybegynder
12. juni 2005 - 10:33 #2
Fra msdn :
The using statement defines a scope at the end of which an object will be disposed.
using (expression | type identifier = initializer) statement
where:
expression
An expression you want to call Dispose on upon exiting the using statement.
type
The type of identifier.
identifier
The name, or identifier, of the type type. It is possible to define more than one identifier of type type. Precede each identifier = initializer with a comma.
initializer
An expression that creates an object.
statement
The embedded statement or statements to executed.
Remarks
You create an instance in a using statement to ensure that Dispose is called on the object when the using statement is exited. A using statement can be exited either when the end of the using statement is reached or if, for example, an exception is thrown and control leaves the statement block before the end of the statement.
The object you instantiate must implement the System.IDisposable interface.
Example
// cs_using_statement.cs
// compile with /reference:System.Drawing.dll
using System.Drawing;
class a
{
  public static void Main()
  {
      using (Font MyFont = new Font("Arial", 10.0f), MyFont2 = new Font("Arial", 10.0f))
      {
        // use MyFont and MyFont2
      }  // compiler will call Dispose on MyFont and MyFont2

      Font MyFont3 = new Font("Arial", 10.0f);
      using (MyFont3)
      {
        // use MyFont3
      }  // compiler will call Dispose on MyFont3

  }
}
Avatar billede dr_chaos Nybegynder
12. juni 2005 - 10:33 #3
hmmm husk at refreshe siden når man har været væk fra computeren i noget tid...
Avatar billede ameq Nybegynder
12. juni 2005 - 11:03 #4
okey, det vil sige hvis nu jeg har en class som jeg selv har lavet til at conn til min database så ville jeg kunne tilføje en IDisposable og en deconstorut (~ metode)
i min klasse og der ville jeg kunne f.eks kunne lukke min forbindelse?

men hvordan ser sådan et IDisposable ud?
Avatar billede nielle Nybegynder
12. juni 2005 - 11:09 #5
class dinClass : IDisposable
{
    public void enAfDineKlasser(int X)
    {
        // ...
    }

    #region IDisposable Members

    public void Dispose()
    {
        // TODO:  Add dinClass.Dispose implementation
    }

    #endregion
}
Avatar billede ameq Nybegynder
12. juni 2005 - 11:19 #6
okey? så min database conn class skal nedvare fra IDisposable?

men hvor er det ellers smart at bruge IDisposable?
Avatar billede nielle Nybegynder
12. juni 2005 - 11:26 #7
Et program bruger resourcer – din database er f.eks. godt eksempel. Disse ressourcer kan være enten managed eller unmanaged; Dvs. under kontrol af CLR’et eller ikke. Så længe dit database stsyem ikke direkte er udviklet til at spille sammen med .NET så er de unmanaged. Og det er det med garanti i skrivende stund.

CLR’et kommer med en god indbygget Garbaga Collection. Problemet er at denne kun kan rydde op efter brugen af managed kode. Den kan ikke rydde op efter unmanaged kode, og det er netop den slags som resultere i memoryleaks.

For at sikre sig er man altså selv nødt til gøre skrive den reelevante kode, og det er her at IDisposable kommer ind. Man placere simpelthen den kode som rydder op i ens unmanaged resourcer i Dispose metoden.
Avatar billede ameq Nybegynder
12. juni 2005 - 11:59 #8
he den fik jeg ikke helt...

Det med CLR er jeg med på... men det med managed og unmanaged kode... det er jeg ikke helt sikker på hvad går ud på =)
Avatar billede nielle Nybegynder
12. juni 2005 - 12:51 #9
"Managed kode" er det kode som afvikles via CLR'et. "Unmanaged kode" er "gammel kode" som ikke direkte er kendt af CLR'et (altså af .NET frameworket). Det udvikles derfor ikke via CLR'et - det er unmanaged (ustyret).
Avatar billede roenving Novice
13. juni 2005 - 04:16 #10
-- men umiddelbart vil man benytte sig af de i frameworket indbyggede metoder til at lave en connection til en database, og så er oprydningsmetoderne indbyggede ...

-- men using ser ud til at være nyttig på den måde, at du ikke selv har brug for at kalde oprydningen, da det sker som en del af afslutningen på using-clausen !-)
Avatar billede ameq Nybegynder
14. juni 2005 - 08:45 #11
okey, tak for det =) kommer i lige med svar?
Avatar billede nielle Nybegynder
14. juni 2005 - 15:11 #12
Svar :^)
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

IT-JOB

Capgemini Danmark A/S

Open Application (Denmark)

Netcompany A/S

Test Consultant

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Tech Lead til Datacenter Operations