.NET手記-クラスとインタフェースを定義する拡張方法

3099 ワード

iOS開発者にとって、拡張方法を使うのは日常茶飯事です.多くのクラスがシステムフレームワークの定義を持っているため、ソースコードを修正したり修正したりすることはできませんが、拡張方法を追加して使用したいと思っています.この場合、拡張方法を定義するのに役立ちます.iOS開発中のCategoryのように、C#も実現しています.
 
次に、Cクラスまたはインタフェースの拡張方法を定義する方法について説明します.
 
1.GuestResponse.csという名前のベースクラスを作成
 
using System.ComponentModel.DataAnnotations;

namespace PartyInvites.Models
{
    public class GusetResponse
    {
        [Required(ErrorMessage="Please input your name")]
        public string Name { get; set; }
        [Required(ErrorMessage="Please input your email")]
        [RegularExpression(".+\\@.+\\..+",ErrorMessage="Please enter a valid email address")]
        public string Email { get; set; }
        [Required(ErrorMessage="Please input your phone number")]
        [RegularExpression("\\d+",ErrorMessage="Please enter a valid phone number")]
        public string Phone { get; set; }
        [Required(ErrorMessage="Please specify whether you will attend")]
        public bool? WillAttend { get; set; }

    }
}

 
これは簡単なクラスで、ASP.NET MVCプロジェクトで使用されます.次に、ソースコードを変更せずに拡張方法を追加する必要があります.
 
2.MyExtensionMethods.csという名前の拡張メソッドクラスを作成
 
namespace PartyInvites.Models
{
    public static class MyExtensionMethods
    {
        public static string TestExtensionMethod(this GusetResponse guestResponse)
        {
            return guestResponse.Name;
        }
    }
}

 
拡張メソッドTestExtensionMethodがあります.重要なのは彼のパラメータです.thisキーワードはこのメソッドを拡張メソッドとしてマークします.GuestResponseパラメータは.NETにこの拡張メソッドはGuestResponseクラスに使用され、最後のパラメータguestResponseはGuestResponseのインスタンスを参照するために使用されることを示します.
 
3.ここまで来ると、この拡張方法を直接使用することができます.ここでは、コードで直接呼び出します.
 
var guestResponse = new GusetResponse();
var result = guestResponse.TestExtensionMethod();

 
注意:.NETは、プロジェクトと拡張メソッドクラスが同じ役割ドメインにある場合にのみ認識されます.インタフェースの拡張メソッドを定義する方法とクラスを定義する拡張メソッドはほぼ一致しており、自分で試してみることができます.