Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Output parameter

Postades av 2002-10-19 21:40:49 - Thomas Modig, i forum c# (c-sharp), Tråden har 3 Kommentarer och lästs av 1238 personer

Hallå,

När det gäller att skicka med parametrar till metoder skrivna med c# (såklart eftersom det är i det forumet jag skriver) så kan man ju skicka argument som värde eller också så kan man skicka en variabels referens. Utöver detta så kan man dessutom deklarera en parameter som output.

<code>
public void aName (out string Name)
{
Name = "Thomas";
}
public void ShowName()
{
string Name;
aName(out Name);
Console.Writeline("Dagens namn är " + Name);
}
</code>

Jag tycker att man kan åstadkomma exakt samma möjligheter om man skickar en referensvariabel som parameter i stället.

<code>
public void aName (ref string Name)
{
Name = "Thomas";
}
public void ShowName()
{
// Den här variabeln måste initieras innan den kan skickas som parameter
string Name = "";
aName(ref Name);
Console.Writeline("Dagens namn är " + Name);
}
</code>

Är det någon som har en förklaring till varför man ibland skall behöva använda outputparametrar. Jag menar det måste finnas någon anledning till det eftersom man har implementerat denna möjlighet i c#. I VB.NET så finns inte denna möjlighet kan jag tillägga.

mvh /Thomas


Svara

Sv: Output parameter

Postades av 2002-10-20 00:20:06 - Patrik Löwendahl

Skillnaden är marginell och finns där av OOP anledningar.

En OUT parameter kan aldrig skicka in data till metoden, vilket ref kan.

Det vill säga du skulle kunna göra:

<code>
public void Inc(ref int number)
{
number++;
}
</code>

men följande skulle inte fungera:
<code>
public void Inc(out int number)
{
number++;
}
</code>

Det gör att JIT compilerna kan direkt anta att ingen data måsta marshalas in i metod anropet, utan bara ut för de argument som har OUT. Medans de som har REF måste använda marshaling båd in och ut i anropet.

Det underlättar anropet. Speciellt om det sträcker sig över process gränser eller ännu värre, maskingränser.

IL koden [1] i sig är ingen större skillnad (om man bortser från de metoder som ropar på out/ref metoderna, där en extra variablen instanciering krävs) Men nativ koden och CLR'ns beteende skiljer sig.



[1]

OUT:
<code>
.method public hidebysig instance void aName([out] string& Name) cil managed
{
// Code size 8 (0x8)
.maxstack 2
IL_0000: ldarg.1
IL_0001: ldstr "Thomas"
IL_0006: stind.ref
IL_0007: ret
}
</code>

REF:
<code>
.method public hidebysig instance void bName(string& Name) cil managed
{
// Code size 8 (0x8)
.maxstack 2
IL_0000: ldarg.1
IL_0001: ldstr "Thomas"
IL_0006: stind.ref
IL_0007: ret
}
</code>







Svara

Sv: Output parameter

Postades av 2002-10-21 19:57:49 - Peter Bladh

Anropet av de respektive kan oxå se annorlunda ut. Är det en out parameter behöver inte variabeln vara initierad (eller som Patrik påpekar är det ingen poäng med det);

string s;
myFunctionOut(out s);

med ref:

string s = "";
myFunctionRef(ref s);

/peterbladh


Svara

Sv: Output parameter

Postades av 2002-10-22 20:59:10 - Thomas Modig

Det var ett bra svar som jag skall ha i bakhuvudet. Jag hoppas att det är en teknik som jag någongång kommer att behöva använda, bara för att veta att just det anropet är optimerad till det yttersta :)

thx /Thomas


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 154
27 952
271 704
711
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies