C# 5: แนะนำให้รู้จักคุณสมบัติใหม่ Caller Info Attributes

คุณสามารถใช้ tag optional parameter หนึ่งในสาม ที่เรียกว่า Caller Info Attributes ซึ่งเป็นคำสั่ง ให้ compiler นำข้อมูลที่ได้รับ ฟีดจาก source code ของ caller(ผู้เรียก) ไปแทนค่า default ของ parameter ได้ดังต่อไปนี้

  • [CallerMemberName] นำ ชื่อ member ของ caller มาฟีดให้
  • [CallerFilePath] นำ path ที่อยู่ file source code ของ caller มาฟีดให้
  • [CallerLineNumber] นำจำนวนของบรรทัดใน file source code ของ caller มาฟีดให้

Foo method ตามโปรแกรมข้างล่างนี้อธิบายกรณีการใช้ทั้งหมดแล้ว

using System;
using System.Runtime.CompilerServices;
class Program
{

static void Main()

{

Foo();

}

static void Foo (

[CallerMemberName] string memberName = null,

[CallerFilePath] string filePath = null,

[CallerLineNumber] int lineNumber = 0)

{

Console.WriteLine (memberName);

Console.WriteLine (filePath);

Console.WriteLine (lineNumber);

}

}

สมมติว่าโปรแกรม ของเราอยู่ใน c:\source\test\Program.cs ผลลัพย์จะต้องเป็น

Main
c:\source\test\Program.cs
8

โดยมาตรฐาน optional parameter การแทนค่าทำได้สำเร็จที่ calling site(จุดที่ผู้เรียกกำลัง run) ดังนั้นถ้าดูใน Main method ข้อมูล caller จะถูกฟีดใส่ optional parameter ทั้งสามใน method Foo ง่ายๆแบบนี้

static void Main()

{

Foo (“Main”, @”c:\source\test\Program.cs”, 8);

}

Caller info attributes ใช้ประโยชน์สำหรับการเขียน logging functions และสำหรับทำรูปแบบแจ้งเตือนการเปลี่ยนแปลง(change notification patterns) ตัวอย่างเช่น วิธีการดังต่อไปนี้สามารถเรียกจากภายใน property set accessor ได้ โดยไม่ต้องระบุ ชื่อ property

void RaisePropertyChanged (

[CallerMemberName] string propertyName = null)

{

}


จบครับแล้วจะนำคุณสมบัติใหม่ๆใน C# 5.0 มาฝากอีก ถ้าผมเดินทางไปเจอเข้า แล้วเห็นว่ามันมีประโยชน์อย่างยิ่ง

ขอบคุณครับ
#:P

Advertisements

#c