(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

ref (C#-Referenz)

Das ref-Schlüsselwort bewirkt, dass ein Argument durch einen Verweis und nicht durch seinen Wert übergeben wird. Die Übergabe per Referenz bewirkt, dass jede Änderung des Parameters innerhalb der Methode die zugrunde liegende Argumentvariable der aufrufenden Methode betrifft. Der Wert eines Verweisparameters ist immer der selbe wie der Wert der zugrunde liegenden Argumentvariable.

Hinweis Hinweis

Verwechseln Sie das Übergeben als Verweis nicht mit Verweistypen. Die beiden Konzepte sind nicht identisch. Ein Methodenparameter kann durch ref geändert werden, unabhängig davon, ob es ein Werttyp oder ein Verweistyp ist. Beim Übergeben als Verweis wird kein Werttypboxing durchgeführt.

Um einen ref-Parameter zu verwenden, müssen die Methodendefinition und der Aufruf von Methoden ref das Schlüsselwort, wie im folgenden Beispiel gezeigt explizit verwenden.


    class RefExample
    {
        static void Method(ref int i)
        {
            // Rest the mouse pointer over i to verify that it is an int.
            // The following statement would cause a compiler error if i
            // were boxed as an object.
            i = i + 44;
        }

        static void Main()
        {
            int val = 1;
            Method(ref val);
            Console.WriteLine(val);

            // Output: 45
        }
    }



Ein Argument, das einem ref-Parameter übergeben wird, muss initialisiert werden, bevor es übergeben wird. Dies unterscheidet sich von out-Parametern, deren Argumente nicht explizit initialisiert werden müssen, bevor sie übergeben werden. Weitere Informationen finden Sie unter out.

Member einer Klasse können Signaturen aufweisen, die nur von ref und out unterscheiden. Ein Kompilierungsfehler tritt auf, wenn der einzige Unterschied zwischen zwei Member eines Typs ist, dass einer dieser einen ref-Parameter hat und die andere einen out-Parameter verfügt. Der folgende Code beispielsweise nicht kompiliert.


class CS0663_Example
{
    // Compiler error CS0663: "Cannot define overloaded 
    // methods that differ only on ref and out".
    public void SampleMethod(out int i) { }
    public void SampleMethod(ref int i) { }
}


kann jedoch das Überladen, wenn eine Methode ref, oder hat out-Parameter und die andere einen Wertparameter verfügte, wie im folgenden Beispiel gezeigt durchgeführt werden.


    class RefOverloadExample
    {
        public void SampleMethod(int i) { }
        public void SampleMethod(ref int i) { }
    }



In anderen Situationen, die übereinstimmende Signatur, die wie Ausblenden oder Überschreiben, ref und out benötigen, sind Teil der Signatur und gleichen nicht ab.

Eigenschaften sind keine Variablen. Sie sind Methoden und können nicht in ref-Parametern übergeben werden.

Weitere Informationen zum Übergeben von Arrays finden Sie unter Übergeben von Arrays mithilfe von "ref" und "out" (C#-Programmierhandbuch).

Sie können die ref und out Schlüsselwörter für die folgenden Arten von Methoden nicht verwenden:

  • Async-Methoden, die Sie definieren, indem Sie den async-Modifizierer verwenden.

  • Iteratormethoden, die eine Rendite oder yield break-Anweisung enthalten.

Die vorherigen Beispiele zeigen, was geschieht, wenn Sie Werttypen als Verweis übergeben. Sie können das - Schlüsselwort ref auch verwenden, um Verweistypen zu übergeben. Die Übergabe eines Referenztyps als Verweis ermöglicht der aufgerufenen Methode, das Objekt, auf das der Verweisparameter verweist, zu ändern. Der Speicherort des Objekts wird an die - Methode als Wert des Verweisparameters übergeben. Wenn Sie den Speicherort des Parameters ändern, ändern Sie den Speicherort des zugrunde liegenden Arguments. Im folgenden Beispiel wird eine Instanz eines Referenztyps als ref-Parameter. Weitere Informationen dazu, wie Verweistypen einen Wert und durch einen Verweis, finden Sie unter Übergeben von Verweistypparametern (C#-Programmierhandbuch) führt.


class RefExample2
{
    static void ChangeByReference(ref Product itemRef)
    {
        // The following line changes the address that is stored in  
        // parameter itemRef. Because itemRef is a ref parameter, the
        // address that is stored in variable item in Main also is changed.
        itemRef = new Product("Stapler", 99999);

        // You can change the value of one of the properties of
        // itemRef. The change happens to item in Main as well.
        itemRef.ItemID = 12345;
    }

    static void Main()
    {
        // Declare an instance of Product and display its initial values.
        Product item = new Product("Fasteners", 54321);
        System.Console.WriteLine("Original values in Main.  Name: {0}, ID: {1}\n",
            item.ItemName, item.ItemID);

        // Send item to ChangeByReference as a ref argument.
        ChangeByReference(ref item);
        System.Console.WriteLine("Back in Main.  Name: {0}, ID: {1}\n",
            item.ItemName, item.ItemID);
    }
}

class Product
{
    public Product(string name, int newID)
    {
        ItemName = name;
        ItemID = newID;
    }

    public string ItemName { get; set; }
    public int ItemID { get; set; }
}

// Output: 
//Original values in Main.  Name: Fasteners, ID: 54321

//Back in Main.  Name: Stapler, ID: 12345


Weitere Informationen finden Sie in der C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Vielen Dank für Ihr Feedback.

Community-Beiträge

HINZUFÜGEN
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft. Alle Rechte vorbehalten.