Udostępnij za pośrednictwem


Metody (Przewodnik programowania w języku C#)

Metoda jest blok kodu, który zawiera serię instrukcji.Program powoduje, że instrukcje, które mają być wykonane przez wywołanie metody i określając wszelkie argumenty wymagane metody.W C# każdej wykonanej instrukcji jest wykonywana w kontekście metody.Metody Main jest punkt wejścia dla każdej aplikacji C# i jest wywoływana przez common language runtime (CLR), gdy program jest uruchomiony.

[!UWAGA]

W tym temacie omówiono metody o nazwie.Aby uzyskać informacje o funkcjach anonimowych, zobacz Funkcje anonimowe (Przewodnik programowania w języku C#).

Metoda podpisów

Metody są zadeklarowane w klasy lub struct określając poziom dostępu, takich jak public lub private, Modyfikatory opcjonalnych, takich jak abstract lub sealed, zwracana wartość, nazwa metody i parametry metody.Te części są ze sobą podpis metody.

[!UWAGA]

Zwracany typ metoda nie jest częścią podpisu metody do celów przeciążenia metody.Jednak jest częścią podpisu metody przy ustalaniu zgodności między pełnomocnika, a metoda, który wskazuje.

Parametry metody są ujęte w nawiasy i są oddzielone przecinkami.Puste nawiasy wskazują, że metoda nie wymaga żadnych parametrów.Ta klasa zawiera trzy metody:

abstract class Motorcycle
{
    // Anyone can call this. 
    public void StartEngine() {/* Method statements here */ }

    // Only derived classes can call this. 
    protected void AddGas(int gallons) { /* Method statements here */ }

    // Derived classes can override the base class implementation. 
    public virtual int Drive(int miles, int speed) { /* Method statements here */ return 1; }

    // Derived classes must implement this. 
    public abstract double GetTopSpeed(); 
}

Metoda dostępu

Wywołanie metody obiektu jest jak uzyskiwanie dostępu do pola.Po nazwie obiektu należy dodać okres, nazwa metoda i nawiasy.Argumenty są wymienione w nawiasie i są oddzielone przecinkami.Metody Motorcycle klasy, dlatego może być wywoływana jak w następującym przykładzie:

class TestMotorcycle : Motorcycle
{

    public override double GetTopSpeed()
    {
        return 108.4;
    }

    static void Main()
    {

        TestMotorcycle moto = new TestMotorcycle();

        moto.StartEngine();
        moto.AddGas(15);
        moto.Drive(5, 20);
        double speed = moto.GetTopSpeed();
        Console.WriteLine("My top speed is {0}", speed);            
    }
}

Parametry metody VS. argumenty

Definicja metody określa nazwy i typy parametrów, które są wymagane.Podczas wywoływania kodu wywołania metody, zawiera konkretne wartości nazywanych argumentami dla każdego parametru.Argumenty muszą być zgodne z typem danych parametru, ale argument nazwę (jeśli są) w kod wywołujący nie musi być taki sam jak parametr o nazwie określonych w metodzie.Na przykład:

public void Caller()
{
    int numA = 4;
    // Call with an int variable. 
    int productA = Square(numA);

    int numB = 32;
    // Call with another int variable. 
    int productB = Square(numB);

    // Call with an integer literal. 
    int productC = Square(12);

    // Call with an expression that evaulates to int.
    productC = Square(productA * 3);
}

int Square(int i)
{
    // Store input argument in a local variable. 
    int input = i;
    return input * input;
}

Przekazywanie przez odwołanie VS. przekazywanie przez wartość

Domyślnie gdy typ wartości jest przekazywany do metody, kopia jest przekazywana zamiast samego obiektu.W związku z tym zmiany do argumentu nie mają wpływu na oryginalny egzemplarz w wywołanie metody.Typ wartości można przekazać przez odniesienie, przy użyciu słowa kluczowego ref.Aby uzyskać więcej informacji, zobacz Przekazywanie parametrów typu wartość (Przewodnik programowania w języku C#).Aby uzyskać listę typów wbudowanych wartości, zobacz Tabela typów wartości (odwołanie w C#).

Gdy obiekt typu odwołanie jest przekazywana do metody, odwołanie do obiektu jest przekazywana.Oznacza to, że metoda odbiera nie samego obiektu, ale argument, która wskazuje położenie obiektu.Jeśli zmienisz członek obiektu przy użyciu tego odwołania, zmiana znajduje odzwierciedlenie w argument w metodzie wywołującego, nawet jeśli obiekt przechodzą przez wartość.

Utwórz typ odwołania za pomocą class słów kluczowych, jak pokazano w następującym przykładzie.

public class SampleRefType
{
    public int value;
}

Teraz Jeśli przekazany obiekt, który jest oparty na tego typu do metody, odwołanie do obiektu jest przekazywana.Poniższy przykład przekazuje obiektu typu SampleRefType do metody ModifyObject.

public static void TestRefType()
{
    SampleRefType rt = new SampleRefType();
    rt.value = 44;
    ModifyObject(rt);
    Console.WriteLine(rt.value);
}
static void ModifyObject(SampleRefType obj)
{
    obj.value = 33;
}

Przykład jest zasadniczo to samo, jak w poprzednim przykładzie, w tym argument przechodzi przez wartość do metody.Ale, ponieważ używany jest typ odwołania, wynik jest inny.Modyfikacja, że jest w ModifyObject do value pole parametru, obj, zmienia się również value pole argumentu, rt, w TestRefType metoda.TestRefType Metoda Wyświetla 33 jako dane wyjściowe.

Aby uzyskać więcej informacji o tym, jak przekazać typów referencyjnych przez odwołanie, a wartości, zobacz Przekazywanie parametrów typu odwołanie (Przewodnik programowania w języku C#) i Typy odwołań (odwołanie w C#).

Zwracają wartości

Metody może zwrócić wartość do obiektu wywołującego.Jeśli typ zwrotu, typ wymienionych przed nazwą metoda nie jest void, metoda zwraca wartość za pomocą return słowa kluczowego.Instrukcja z return słowo kluczowe, wartość odpowiadającą zwracany typ zwraca tę wartość do wywołania metody.return Słowa kluczowego również zatrzymuje wykonywanie metody.Jeśli typ zwracany jest void, return instrukcja bez wartości jest nadal przydatny zatrzymać wykonywanie metody.Bez return słowa kluczowego, metoda zatrzyma wykonywanie po osiągnięciu końca bloku kodu.Z innych niż void zwracają typ są zobowiązane do stosowania return słów kluczowych w celu zwrócenia wartości.For example, these two methods use the return keyword to return integers:

class SimpleMath
{
    public int AddTwoNumbers(int number1, int number2)
    {
        return number1 + number2;
    }

    public int SquareANumber(int number)
    {
        return number * number;
    }
}

To use a value returned from a method, the calling method can use the method call itself anywhere a value of the same type would be sufficient.You can also assign the return value to a variable.For example, the following two code examples accomplish the same goal:

int result = obj.AddTwoNumbers(1, 2);
result = obj.SquareANumber(result);
// The result is 9.
Console.WriteLine(result);
result = obj.SquareANumber(obj.AddTwoNumbers(1, 2));
// The result is 9.
Console.WriteLine(result);

Using a local variable, in this case, result, to store a value is optional.It may help the readability of the code, or it may be necessary if you need to store the original value of the argument for the entire scope of the method.

Aby uzyskać więcej informacji, zobacz return (odwołanie w C#).

Async Methods

By using the async feature, you can invoke asynchronous methods without using explicit callbacks or manually splitting your code across multiple methods or lambda expressions.The async feature was introduced Visual Studio 2012.

Jeśli oznaczysz metoda z asynchroniczne modyfikator, można użyć czekają na operator w metodzie.When control reaches an await expression in the async method, control returns to the caller, and progress in the method is suspended until the awaited task completes.Po wykonaniu zadania w metodzie wznowić wykonywanie.

[!UWAGA]

An async method returns to the caller when either it encounters the first awaited object that’s not yet complete or it gets to the end of the async method, whichever occurs first.

An async method can have a return type of Task, Task, or void.The void return type is used primarily to define event handlers, where a void return type is required.An async method that returns void can't be awaited, and the caller of a void-returning method can't catch exceptions that the method throws.

In the following example, DelayAsync is an async method that has a return type of Task.DelayAsync has a return statement that returns an integer.Therefore the method declaration of DelayAsync must have a return type of Task<int>.Because the return type is Task<int>, the evaluation of the await expression in DoSomethingAsync produces an integer as the following statement demonstrates: int result = await delayTask.

The startButton_Click method is an example of an async method that has a return type of void.Because DoSomethingAsync is an async method, the task for the call to DoSomethingAsync must be awaited, as the following statement shows: await DoSomethingAsync();.The startButton_Click method must be defined with the async modifier because the method has an await expression.

// using System.Diagnostics; 
// using System.Threading.Tasks; 

// This Click event is marked with the async modifier. 
private async void startButton_Click(object sender, RoutedEventArgs e)
{
    await DoSomethingAsync();
}

private async Task DoSomethingAsync()
{
    Task<int> delayTask = DelayAsync();
    int result = await delayTask;

    // The previous two statements may be combined into 
    // the following statement. 
    //int result = await DelayAsync();

    Debug.WriteLine("Result: " + result);
}

private async Task<int> DelayAsync()
{
    await Task.Delay(100);
    return 5;
}

// Output: 
//  Result: 5

An async method can't declare any ref or out parameters, but it can call methods that have such parameters.

For more information about async methods, see Programowanie asynchroniczne z Async i Await (C# i Visual Basic), Przepływ sterowania w aplikacjach asynchronicznych (C# i Visual Basic), and Asynchroniczne typy zwracane (C# i Visual Basic).

Iterators

Iterację wykonuje niestandardowe iteracji przez kolekcję, takie jak listy lub tablicy.Iterację używa zwróceniu przekazu instrukcja zwraca każdy jeden element naraz.When a yield return statement is reached, the current location in code is remembered.Wykonanie ponownego uruchomienia z tej lokalizacji po sterująca nazywa się następnym razem.

You call an iterator from client code by using a foreach statement.

The return type of an iterator can be IEnumerable, IEnumerable, IEnumerator, or IEnumerator.

Aby uzyskać więcej informacji, zobacz Iteratory (C# i Visual Basic).

Specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.

Zobacz też

Informacje

Klasy i struktury (Przewodnik programowania w języku C#)

Modyfikatory dostępu (Przewodnik programowania w języku C#)

Klasy statyczne i statyczni członkowie klas (Przewodnik programowania w języku C#)

Dziedziczenie (Przewodnik programowania w języku C#)

Klasy abstrakcyjne i zapieczętowane oraz członkowie klas (Przewodnik programowania w języku C#)

params (odwołanie w C#)

return (odwołanie w C#)

out (odwołanie w C#)

ref (odwołanie w C#)

Przekazywanie parametrów (Przewodnik programowania w języku C#)

Koncepcje

Przewodnik programowania w języku C#