Jen

C# 3.0 擴充類別方法的語法、應用

在C# 如果你想擴充某類別的方法,你可以在丟入參數加上this關鍵字,範例如下

自行定義空間

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static int WordCount(this String str)
        {
            return str.Split(new char[] { ' ', '.', '?' },
            StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }
}

 

參考到了就可以直接使用

using ExtensionMethods;
.. .. 
string s = "Hello Extension Methods";
int i = s.WordCount();

參考http://msdn.microsoft.com/en-us/library/bb383977.aspx

 

大部分應用在MVC應用程式的開發,例如一些Model的Business Logic、Validate 、HtmlHelper的擴充。

 

假設我們要為HtmlHelper擴充一個Menu()方法,可以幫我們產生下面這2個連結,

clip_image001

我們可以搭配Web.Sitemap來定義HtmlHelper的擴充.

namespace MVCSite.Helpers
{
    public static class MenuHelper
    {
        public static string Menu(this HtmlHelper helper)
        {
            var sb = new StringBuilder();
            sb.Append("<ul id='menu'>");
            var topLevelNodes = SiteMap.RootNode.ChildNodes;
            foreach (SiteMapNode node in topLevelNodes)
            {
                if (SiteMap.CurrentNode == node)
                    sb.AppendLine("<li>");
                else
                    sb.AppendLine("<li>");
                sb.AppendFormat("<a href='{0}'>{1}</a>", node.Url,
                    helper.Encode(node.Title));
                sb.AppendLine("</li>");
            }
            sb.Append("</ul>");
            return sb.ToString();
        }
    }
}

在View的部分就可以這樣使用

<%@ Import Namespace="MVCSite.Helpers" %>

    <div id="menucontainer">

    <% = Html.Menu() %>

</div>

其他參考

New "Orcas" Language Feature: Extension Methods

http://msdn.microsoft.com/en-us/library/system.web.mvc.htmlhelper.aspx

0 意見: