Bài đăng nổi bật

 




Các thông số tùy chọn

Trong C #, các phương thức có thể được cung cấp các tham số tùy chọn . Một tham số là tùy chọn nếu khai báo của nó chỉ định một đối số mặc định . Các phương thức với một tham số tùy chọn có thể được gọi có hoặc không có truyền vào một đối số cho tham số đó. Nếu một phương thức được gọi mà không truyền đối số cho tham số tùy chọn , thì tham số được khởi tạo với giá trị mặc định của nó.

Để xác định một tham số tùy chọn , hãy sử dụng dấu bằng sau phần khai báo tham số, theo sau là giá trị mặc định của nó.


// y and z are optional parameters.
static int AddSomeNumbers(int x, int y3, int z2)
{
  return xyz;
}

// Any of the following are valid method calls.
AddSomeNumbers(1); // Returns 6.
AddSomeNumbers(1, 1); // Returns 4.
AddSomeNumbers(3, 3, 3); // Returns 9.

Các phương thức bên trong các biến

Các tham số và biến được khai báo bên trong một phương thức không thể được sử dụng bên ngoài phần thân của phương thức. Cố gắng làm như vậy sẽ gây ra lỗi khi biên dịch chương trình!


static void DeclareAndPrintVars(int x)
{
  int y3;
  // Using x and y inside the method is fine.
  Console.WriteLine(xy);
}

static void Main()
{
  DeclareAndPrintVars(5);
  
  // x and y only exist inside the body of DeclareAndPrintVars, so we cannot use them here.
  Console.WriteLine(xy);
}

Loại trả lại Void

Trong C #, các phương thức không phải returnlà giá trị có voidkiểu trả về.

voidkhông phải là một kiểu dữ liệu thực tế giống như inthoặc string, vì nó đại diện cho việc thiếu đầu ra hoặc giá trị.


// This method has no return value
static void DoesNotReturn()
{
  Console.WriteLine("Hi, I don't return like a bad library borrower.");
}
// This method returns an int
static int ReturnsAnInt()
{
  return 23;
}

Khai báo phương pháp

Trong C #, một khai báo phương thức , còn được gọi là tiêu đề phương thức , bao gồm mọi thứ về phương thức khác với phần thân của phương thức. Khai báo phương thức bao gồm:

  • tên phương pháp
  • các loại tham số
  • thứ tự tham số
  • tên tham số
  • loại trả lại
  • bổ ngữ tùy chọn

Một khai báo phương thức mà bạn thường thấy là khai báo cho Mainphương thức (lưu ý rằng có nhiều hơn một Mainkhai báo hợp lệ):

static void Main(string[] args)


// This is an example of a method header.
static int MyMethodName(int parameter1, string parameter2) {
  // Method body goes here...
}

Từ khóa trả lại

Trong C #, returncâu lệnh có thể được sử dụng để trả về một giá trị từ một phương thức trở lại trình gọi của phương thức đó.

Khi returnđược gọi, phương thức hiện tại kết thúc và điều khiển được trả về nơi phương thức ban đầu được gọi. Giá trị được trả về bởi phương thức phải khớp với kiểu trả về của phương thức , được chỉ định trong khai báo phương thức .


static int ReturnAValue(int x)
{
  // We return the result of computing x * 10 back to the caller.
  // Notice how we are returning an int, which matches the method's return type.
  return x10;
}

static void Main()
{
  // We can use the returned value any way we want, such as storing it in a variable.
  int numReturnAValue(5);
  // Prints 50 to the console.
  Console.WriteLine(num);
}

Tham số Out

returnchỉ có thể trả về một giá trị. Khi cần nhiều giá trị, outcác tham số có thể được sử dụng.

outcác tham số được bắt đầu bằng outtrong tiêu đề phương thức. Khi được gọi, đối số cho mỗi outtham số phải là một biến có tiền tố out.

Các outtham số trở thành bí danh cho các biến đã được truyền vào. Vì vậy, chúng ta có thể gán giá trị cho các tham số và chúng sẽ tồn tại trên các biến mà chúng ta đã truyền vào sau khi phương thức kết thúc.


// f1, f2, and f3 are out parameters, so they must be prefixed with `out`.
static void GetFavoriteFoods(out string f1, out string f2, out string f3)
{
  // Notice how we are assigning values to the parameters instead of using `return`.
  f1"Sushi";
  f2"Pizza";
  f3"Hamburgers";
}

static void Main()
{
  string food1;
  string food2;
  string food3;
  // Variables passed to out parameters must also be prefixed with `out`.
  GetFavoriteFoods(out food1, out food2, out food3);
  // After the method call, food1 = "Sushi", food2 = "Pizza", and food3 = "Hamburgers".
  Console.WriteLine($"My top 3 favorite foods are {food1}, {food2}, and {food3}");
}

Phương pháp thể hiện

Trong C #, các phương thức thân biểu thức là các phương thức ngắn được viết bằng một cú pháp ngắn gọn đặc biệt. Một phương thức chỉ có thể được viết ở dạng thân biểu thức khi thân phương thức bao gồm một câu lệnh hoặc biểu thức duy nhất. Nếu phần thân là một biểu thức đơn lẻ, thì biểu thức đó được sử dụng làm giá trị trả về của phương thức.

Cú pháp chung là returnType funcName(args...) => expression;Lưu ý cách ký hiệu "mũi tên béo" =>, được sử dụng thay cho dấu ngoặc nhọn. Cũng lưu ý rằng returntừ khóa không cần thiết, vì biểu thức được trả về một cách ngầm định.


static int Add(int x, int y)
{
  return xy;
}

static void PrintUpper(string str)
{
  Console.WriteLine(str.ToUpper());
}

// The same methods written in expression-body form.
static int Add(int x, int y) => xy;

static void PrintUpper(string str) => Console.WriteLine(str.ToUpper());

Biểu thức Lambda

Biểu thức lambda là một khối mã được xử lý giống như bất kỳ giá trị hoặc biểu thức nào khác. Nó có thể được truyền vào các phương thức, được lưu trữ trong các biến và được tạo ra bên trong các phương thức.

Đặc biệt, các biểu thức lambda rất hữu ích để tạo các phương thức ẩn danh , các phương thức không có tên, để được truyền vào các phương thức yêu cầu đối số phương thức. Cú pháp ngắn gọn của chúng thanh lịch hơn so với khai báo một phương thức thông thường khi chúng được sử dụng như một đối số phương thức riêng lẻ.


int[] numbers = { 3, 10, 4, 6, 8 };
static bool isTen(int n) {
  return n == 10;
}

// `Array.Exists` calls the method passed in for every value in `numbers` and returns true if any call returns true.
Array.Exists(numbers, isTen);

Array.Exists(numbers, (int n) => {
  return n == 10;
});

// Typical syntax
// (input-parameters) => { <statements> }

Biểu thức Lambda ngắn hơn

Có nhiều cách để rút ngắn cú pháp biểu thức lambda ngắn gọn.

  • Loại tham số có thể được loại bỏ nếu nó có thể được suy ra.
  • Có thể bỏ dấu ngoặc nếu chỉ có một tham số.

Lưu ý thêm, các quy tắc thông thường cho các phương thức thể hiện biểu thức cũng áp dụng cho lambdas.


int[] numbers = { 7, 7, 7, 4, 7 };

Array.Find(numbers, (int n) => { return n != 7; });

// The type specifier on `n` can be inferred based on the array being passed in and the method body.
Array.Find(numbers, (n) => { return n != 7; });

// The parentheses can be removed since there is only one parameter.
Array.Find(numbers, n => { return n != 7; });

// Finally, we can apply the rules for expression-bodied methods.
Array.Find(numbers, n => n != 7);

Post a Comment

أحدث أقدم