Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

อะไรคือความแตกต่างระหว่างผู้รับมอบสิทธิ์ Func และผู้รับมอบสิทธิ์ Action ใน C #


ผู้รับมอบสิทธิ์คือประเภทที่แสดงถึงการอ้างอิงถึงเมธอดที่มีรายการพารามิเตอร์เฉพาะและประเภทการส่งคืน เมื่อเรายกตัวอย่างผู้รับมอบสิทธิ์ เราสามารถเชื่อมโยงอินสแตนซ์กับวิธีการใดๆ ที่มีลายเซ็นที่เข้ากันได้และประเภทการส่งคืน เราสามารถเรียกใช้ (หรือเรียก) วิธีการผ่านอินสแตนซ์ของผู้รับมอบสิทธิ์

ผู้รับมอบสิทธิ์ Func

Func เป็นผู้รับมอบสิทธิ์ทั่วไปที่รวมอยู่ในเนมสเปซของระบบ มีพารามิเตอร์อินพุตเป็นศูนย์หรือมากกว่าและพารามิเตอร์ออกหนึ่งรายการ พารามิเตอร์สุดท้ายถือเป็นพารามิเตอร์ขาออก ผู้รับมอบสิทธิ์นี้สามารถชี้ไปที่วิธีการที่ใช้เวลาถึง 16 พารามิเตอร์และส่งกลับค่า

ด้านล่างนี้คือผู้รับมอบสิทธิ์ Func ที่มีพารามิเตอร์อินพุตและเอาต์พุตสองตัว

Func ต่อท้าย;

ตัวอย่าง

using System;
namespace DemoApplication {
   class Program {
      static void Main(string[] args) {
         Func<string, string, string> func = Append;
         string fullName = func("Michael", "Jackson");
         Console.WriteLine(fullName);
         Console.ReadLine();
      }
      static string Append(string firstName, string lastName) {
         return firstName + lastName;
      }
   }
}

ผลลัพธ์

MichaelJackson

ผู้รับมอบสิทธิ์การดำเนินการ

การดำเนินการคือประเภทผู้รับมอบสิทธิ์ที่กำหนดไว้ในเนมสเปซของระบบ ผู้รับมอบสิทธิ์ประเภทการดำเนินการจะเหมือนกับผู้รับมอบสิทธิ์ Func เว้นแต่ผู้รับมอบสิทธิ์การดำเนินการจะไม่คืนค่า กล่าวอีกนัยหนึ่ง ผู้รับมอบสิทธิ์การดำเนินการสามารถใช้กับวิธีการที่มีประเภทการส่งคืนเป็นโมฆะ สามารถมีพารามิเตอร์อินพุตขั้นต่ำ 1 และสูงสุด 16 พารามิเตอร์ และไม่มีพารามิเตอร์เอาต์พุต

ด้านล่างนี้คือผู้รับมอบสิทธิ์ Func ที่มีพารามิเตอร์อินพุตและเอาต์พุตสองตัว

Func พิมพ์;

ตัวอย่าง

using System;
namespace DemoApplication {
   class Program {
      static void Main(string[] args) {
         Action func = AppendPrint;
         func("Michael", "Jackson");
         Console.ReadLine();
      }
      static void AppendPrint(string firstName, string lastName) {
         string fullName = firstName + lastName;
         Console.WriteLine($"{fullName}");
      }
   }
}

ผลลัพธ์

ผลลัพธ์ของโค้ดด้านบนคือ

MichaelJackson