.net에서 재미있는 확장 방법(Extension Method)
6991 단어 method
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
여기서 routes는 RouteCollection 클래스이고 RouteCollection 클래스에는 MapRoute 방법이 없습니다. MapRoute 방법은 RouteCollectionExtensions 클래스의 방법입니다. 메타데이터에서 얻은 RouteCollectionExtensions의 설명은 다음과 같습니다.
public static class RouteCollectionExtensions
{
public static VirtualPathData GetVirtualPathForArea(this RouteCollection routes, RequestContext requestContext, RouteValueDictionary values);
public static VirtualPathData GetVirtualPathForArea(this RouteCollection routes, RequestContext requestContext, string name, RouteValueDictionary values);
public static void IgnoreRoute(this RouteCollection routes, string url);
public static void IgnoreRoute(this RouteCollection routes, string url, object constraints);
public static Route MapRoute(this RouteCollection routes, string name, string url);
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults);
public static Route MapRoute(this RouteCollection routes, string name, string url, string[] namespaces);
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints);
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, string[] namespaces);
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces);
}
이런 종류는 표면적으로 보면 독립된 종류로 다른 종류에서 계승된 것이 아니라 어떤 Interface도 실현되지 않았지만 주의해서 보면 다음과 같다.
이것은 무엇을 의미하는가?사실 이게 바로.net의 흥미로운 용법은 바로 하나의 종류를 확장하는 방법이지만 이 종류의 코드를 직접 수정하지 않는다는 것이다. 다음은 간단한 예가 있다.
class Hello
{
private string m_strHello = "Hello";
public string String { get { return m_strHello; } set { m_strHello = value; } }
}
static class HelloExtensions
{
public static void AppendWorld(this Hello hello)
{
hello.String += " World";
}
}
class Program
{
static void Main(string[] args)
{
Hello hello = new Hello();
hello.AppendWorld();
Console.WriteLine(hello.String);
}
}
'Append World'라는 방법은 마치'Hello'같은 종류에 속하는 것처럼 보인다.
이렇게 하면 약간의 제한이 있다. 그것은 클래스의 봉인을 깨뜨릴 수 없다는 것이다. 확장 방법은 확장할 클래스의public 구성원만 방문할 수 있고 다른 구성원들은 움직일 수 없다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
각각에 대한 혼란, 수집, 선택 및 매핑 방법직장 생활 초기에 Ruby 프로그래밍 언어를 배울 때 each , collect , select 및 map 방법에 대한 몇 가지 문제에 직면합니다. 그래서 초보 레이블 프로그래머를 위해 이 글을 씁니다. 처음에는 많...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.