namespace System.Web.Mvc.Html
{
// Summary:
// Represents support for HTML in an application.
public static class FormExtensions
{
public static MvcForm BeginForm(this HtmlHelper htmlHelper, string actionName, string controllerName);
...
}
}
BeginFormメソッドの最初のパラメーターの前にある「this」オブジェクトがパラメーターとして受け入れられていないように見えることに気づきました。実際のBeginFormメソッドは次のように機能します。
BeginForm(string actionName, string controllerName);
最初のパラメーターを省略します。しかし、実際には、その最初のパラメーターを何らかの形で隠された方法で受け取ります。この構造がどのように機能するかを説明してください。私は実際にMVC4インターネットサンプルを探索しています。ありがとうございました。
これは、拡張メソッドがC#でどのように機能するかです。拡張メソッド機能を使用すると、既存の型をカスタムメソッドで拡張できます。メソッドのパラメーターのコンテキストでのthis [TypeName]
キーワードは、カスタムメソッドで拡張するtype
であり、this
がプレフィックスとして使用されます。この場合はHtmlHelper
は拡張するtype
であり、BeginForm
はそれを拡張する必要があるメソッドです。
string
型のこの単純な拡張メソッドを見てください。
public static bool BiggerThan(this string theString, int minChars)
{
return (theString.Length > minChars);
}
string
オブジェクトで簡単に使用できます。
var isBigger = "my string is bigger than 20 chars?".BiggerThan(20);
参照:
十分に文書化されたリファレンスは次のようになります: 方法:カスタム拡張メソッドを実装して呼び出す(C#プログラミングガイド)
ASP.NET MVCの拡張メソッドに関するより具体的なリファレンスは次のとおりです。 カスタムMVC拡張メソッドを作成する方法
拡張方法:
既存のタイプを拡張するための「ボルトオン」方法。これらを使用すると、古い型をサブクラス化または再コンパイルすることなく、既存の型を新しい機能で拡張できます。たとえば、特定の文字列が数字であるかどうかを知りたい場合があります。または、コントロール用のASP.net WebFormsにShow()Hide()機能が必要な場合もあります。
例えば:
public static class MyExtensionMethods
{
public static void Show(this Control subject)
{
subject.Visible = true;
}
public static bool IsNumeric(this string s)
{
float output;
return float.TryParse(s, out output);
}
}
編集:詳細については、MSDNのドキュメントを参照してください: http://msdn.Microsoft.com/en-us/library /vstudio/bb383977.aspx これは@aushによって親切にリンクされました。
拡張メソッドに関する「C#InDepth」を読んで楽しんだ。ここに利用可能な抜粋があります: http://my.safaribooksonline.com/book/programming/csharp/9781935182474/extension-methods/ch10lev1sec
もちろん、この本をオンラインで購入することも、Googleを使用してすべてが内部でどのように機能するかを調査することもできます。