C Método # extensión y el uso de

GPS plataforma, la construcción del sitio, desarrollo de software, operación y mantenimiento del sistema, para encontrar una gran tecnología de red bosque!
http://cnsendnet.taobao.com
de Sen Ciencia y Tecnología blog oficial
http://www.cnsendblog.com/index.php/?p=476

método de extensión le permite "agrega" métodos a los tipos existentes sin crear un nuevo tipo derivado, recompilar, o de otra manera modificar el tipo original. método de extensión es un tipo especial de método estático, sino que puede ser llamado como un método de instancia en el mismo tipo de expansión. Estos son los MSDN Descripción del sitio web oficial del método de extensión, y ahora tengo que explicar esta conducta por el ejemplo de una escena. Supongamos que un programa de clase programa de consola {} cuya función principal es la siguiente:

static void Main (string [] args)
{
DateTime ahora = DateTime.Now;
cadena de tiempo = now.ToString ( "aaaa-MM-dd HH: mm: ss");
Console.WriteLine (tiempo);
Console.ReadKey ();
}

Suponga que la demanda ha cambiado, el formato de visualización de la fecha se convierta en "aaaa-MM-dd" formato, puede ser reescrita por el texto siguiente curso inicializado única vez:
String = Tiempo now.ToString ( "aaaa-MM-dd" );
pero si desea cambiar el formato de fecha que hay muchos como él? Cada uno debe ser cambiado de nuevo? Una vez que dicha demanda se cambian las opiniones de las personas demasiado ocupadas. La solución tradicional es empaquetar una clase de ayuda, en cuyo método de escritura, y para otros tipos de llamadas.
Añadir un mimético de la presente realización en la clase DateHelper proyecto actual: public class DateHelper {}, que se define en los métodos de la clase:
static public String dateToString (la dt DateTime)
{
volver dt.ToString ( "el MM-DD-AAAA HH: MM: SS") ;
}
Así, la función principal del original reescrita como sigue:

static void Main (string [] args)
{
DateTime ahora = DateTime.Now;
tiempo String = DateHelper.DateToString (ahora);
Console.WriteLine (tiempo);
Console.ReadKey ();
}

En este punto, si cambian las necesidades, sólo es necesario volver a escribir la clase de método DateHelp DateToString () en la línea, independientemente del número de clases llaman a este método, se verá afectado. Resolver el problema, pero esta clase para llamar a otro método, o un poco de problemas, no hay manera de hacernos como now.DateToString () como un llamado directo que? Por supuesto, Microsoft está escrito DateTime, que no podemos cambiar, no se puede crear un método de instancia que desea, lo que conduce a métodos de extensión.
El siguiente es un método de extensión de elemento:
1. El método debe ser un método estático
2. Este método debe ser colocado en una clase estática
3. El primer parámetro de este método debe comenzar con esto, y este método se extiende a especificar el tipo de
la más elementos, hemos cambiado DateHelper clase estática clase: clase estática pública,) método, mientras que la reescritura de dateToString (DateHelper {}:
static public String dateToString (el este del dt DateTime)
{
volver dt.ToString ( "el mM-dD-AAAA HH: mm: SS ");
}
. En este caso el procedimiento vuelve a la función principal de la misma, la entrada" ahora "se verá a disponer de un método dateToString automáticamente símbolo (), y el código puede escribirse así:

static void Main (string [] args)
{
DateTime ahora = DateTime.Now;
cadena de tiempo = now.DateToString ();
Console.WriteLine (tiempo);
Console.ReadKey ();
}

Obviamente, esto será más cómodo de usar, y por lo veamos como estar un método de instancia en sí tiene el mismo tipo de expansión, de fácil lectura. El siguiente resumen las características de un método de extensión:
1. método de extensión que se extiende desde el tipo, debe ser este tipo de variables a utilizar otros tipos no se pueden utilizar, en este caso se extiende desde tipo DateTime, sólo puede ser una variable de tipo DateTime a cabo. (now.DateToString ())
parámetro detrás de este método de extensión 2. los parámetros del método no lo son, la presente realización hay ningún parámetro, este último se especifica en este DateTime dt método que se extiende desde lo escriba
3. Si los métodos de extensión y ejemplos métodos tienen la misma firma, el método de instancia llamada de prioridad
4. el método de extensión de la clase de los padres, el objeto puede ser utilizado subclases directamente
5. extiende desde la interfaz, el objeto se puede implementar directamente la clase
6. la extensión final método o en el compilador: método estático clase estática (), en este caso now.DateToString () con el tiempo se compila en DateHelper.DateToString (ahora), que es su esencia
, de hecho, podemos encontrar escenarios, tales como un método en una ampliación de la interfaz de tiempo, todos los ya clase que implementa los métodos de interfaz deben alcanzar la nueva extensión, este cambio es un muy Cansado de trabajo, puede utilizar los métodos de extensión "Quxianjiuguo"; y, a veces queremos añadir nuevos métodos a una clase de esta clase no quieren cambio, entonces esta manera de los métodos de extensión "pseudo-agregado" enfoque reflejaría el valor de su . El método más común es extender LINQ operadores de consulta estándar, el uso extensivo de esta manera conveniente y eficiente a los agricultores de código quién debe ganar 1024 puntos alaban.

¿Qué es un método de extensión?
  Método de extensión se refiere literalmente a un método de expansión, y esto corresponde al patrón de programación orientado a objetos se refiere a un método de propagación de clase. De acuerdo con nuestra comprensión de costumbre, lo primero que necesitamos para obtener el código fuente de una clase y, a continuación, añadir los miembros de este método de clase en el código, por lo que se puede lograr el objetivo de proporcionar un método de extensión para una clase. Pero, por desgracia, este método en el código fuente no es el caso de que no puedan trabajar, y nos fuimos a cambiar artificialmente el código fuente puede menoscabar la estabilidad de todo el código. ¿Hay una manera de proporcionar una manera de extender una clase sin cambiar el código fuente de la premisa de que? Este es un método de extensión que queremos decir hoy en día, por lo que se puede extender el método para entender el método proporciona una forma de expandir hacia el exterior sin cambiar el código fuente de la premisa. Los métodos de extensión en C # para poner en práctica es relativamente simple, tal como lo hacemos en el desarrollo Unity3D juego, que puede ser utilizado DOTween este plugin. Este plugin se ITween el autor de volver a escribir un plugin de animación, ITween allí que en la eficiencia mejorado mucho. punto más importante es que utiliza los métodos de extensión para lograr tal manera que cuando llamamos a estos interfaz API es difícil sentir que estamos utilizando un plug-in, más como función nativa utilizando Unity3D, por lo que cuando utilizamos DOTween + Ugui esta combinación cuando el corazón se sentirá muy cómodo, todo caerá en su lugar como un general.
Métodos de extensión ¿Cuáles son las características?
  método de extensión implementado en la programación orientada a objetos y normal es el mismo, es decir, sólo tenemos que definir una clase, y luego añadir el método apropiado puede ser implementado en el mismo. Pero donde hay tres puntos a tener en cuenta aquí En primer lugar, los métodos de extensión clase de implementación debe ser independiente del nombre de la clase y clase estática y métodos de extensión para lograr la clase;. En segundo lugar, un método de clase implementar métodos de extensión debe ser método estático, en tercer lugar, el primer método clase de parámetros implementar métodos de extensión se debe especificar el uso de este método de palabra clave para conseguir la expansión de la clase. Por ejemplo, sabemos que una cadena legítima convierte en un tipo entero, puede utilizar int.parse método (), si queremos extender un método Toint para el tipo de cadena debe ser cómo hacerlo? Juntos nos fijamos en el siguiente código:

  1. /// <summary>
  2. /// 1, la definición de una clase estática
  3. /// 2, nombre de la clase estática y la clase específica para alcanzar el método de extensión es independiente
  4. /// </ summary>
  5. SomeClass clase estática pública
  6. {
  7. /// <summary>
  8. /// 3, para lograr un método específico estático
  9. /// </ summary>
  10. /// <param name = "str"> 4, utilizando el primer parámetro se deben utilizar para especificar el tipo de este método de extensión de la palabra clave </ param>
  11. /// <retornos> </ retornos>
  12. public static int Toint (esta cadena str)
  13. {
  14. retorno int.Parse (str);
  15. }
  16. }
    Tenga en cuenta que el método de extensión de C # soportes es comenzar con la versión .NET3.5, por lo que al escribir un método de extensión, asegúrese de que su versión de .NET cumple con este requisito. Mencionado versión, hay un montón de amigos, sobre todo después de Unity5.0 comenzar a aprender de sus amigos Unity3d, el mensaje menciona a menudo mi código no se ejecuta en un nuevo entorno, etc. Del mismo modo pregunta en mi blog, creo que este mundo la actualización fue sin duda la tecnología informática más rápida, se utiliza la nueva versión sin ningún problema, pero a veces debido a problemas históricos como el desarrollo tecnológico y Python2.7 python3, Unity4.X y Unity5.X, esto puede ocurrir cuando la versión problemas de incompatibilidad, esta vez si los recursos de la red no es hasta la fecha, sugieren que consulte la documentación oficial de la fecha en el momento oportuno, porque parece bloggers relacionados con artículos o libros en la red se utilizan para referirse al antiguo dicho: hacer libro carta como ningún libro, sólo se objetiva, desapasionada determinar el conocimiento correcto o no, que sólo puede aprender el conocimiento realmente útil.
      Pues bien, ahora después de haber terminado de escribir este método de extensión, puede utilizar los métodos de extensión tales como los siguientes:
  17. string str = "1234";
  18. int val = str.ToInt ();
    este ejemplo para mostrar cómo escribir un método de extensión sin argumentos, así que cuando tenemos que pasar parámetros en el método de extensión cómo hacerlo? Sólo tenemos que seguir para añadir parámetros en un comunicado después de que el primer argumento suficiente. Por ejemplo, a menudo necesitamos para coordinar un objeto 3D dispuesto en Unity3D por lo general que puede ser implementado por el código siguiente:
    transform.position Vector3 nuevos nuevos = (1,1,1);
    Este código es relativamente simple hasta el momento, pero Unity3D sabe que, además de la propiedad position hay propiedad localPosition, si nuestro código de nuevo involucrado en coordinar cálculo, creo que el código será muy largo. Lo que es más, a veces sólo queremos cambiar una dimensión de las coordenadas tridimensionales, pero tenemos que dar una transform.position coordenadas tridimensional, como es lógico, en este momento el código será más largo. Para resolver este problema, podemos extender los tres métodos SetPositionX, SetPositionY, SetPositionZ respectivamente como x, y, z las coordenadas de la asignación de tres componentes, que continúan añadiendo métodos SomeClass esta clase:
  19. /// <summary>
  20. /// establece la coordenada X del Tranform
  21. /// </ summary>
  22. /// <param name = "tran"> 当前 Transformar </ param>
  23. /// <param name = "x"> X 坐标 </ param>
  24. public static SetPositionX vacío (esto Transformar tran, float x)
  25. {
  26. tran.position = new Vector3 (x, tran.position.y, tran.position.z);
  27. }
  28. /// <summary>
  29. /// set la coordenada Y Tranform
  30. /// </ summary>
  31. /// <param name = "tran"> 当前 Transformar </ param>
  32. /// <param name = "x"> Y 坐标 </ param>
  33. public static SetPositionY vacío (esto Transformar tran, flotador y)
  34. {
  35. tran.position = nuevo Vector3 (tran.position.x, y, tran.position.z);
  36. }
  37. /// <summary>
  38. /// establece la coordenada Z Tranform
  39. /// </ summary>
  40. /// <param name = "tran"> 当前 Transformar </ param>
  41. /// <param name = "x"> Z 坐标 </ param>
  42. public static SetPositionZ vacío (esto Transformar tran, flotador z)
  43. {
  44. tran.position = nuevo Vector3 (tran.position.x, tran.position.y, z);
  45. }
    El uso de los pros y los contras método extendido de
      los métodos de extensión a mano para su uso, por lo que estamos aquí para discutir los pros y los contras de la utilización de un métodos de extensión inferiores. Por supuesto, los beneficios de unos métodos libres y deliberados de extensión para extender el uso de los métodos de la clase y extensión de consejos inteligentes de Visual Studio serán identificados por una flecha hacia abajo de color azul. método de extensión a la baja es buscar en el diseño de los métodos de extensión puede manejar mejor esta función, de hecho, todas las técnicas son las mismas, a menudo escucho gente desprecia motor del juego Unity3D en el grupo de juego UnReal Engine4 mundo del motor de Monte Rushmore, admito UE4 efecto buena imagen, pero realmente se puede hacer un buen uso de este motor, ¿cuántas personas? Al utilizar métodos de extensión debe seguir el principio de proximidad, es decir, el uso de métodos de extensión en el alcance más pequeño, los métodos de extensión para alcanzar clase específica en lugar de una clase abstracta. Utilizamos el método de extensión simplemente porque se requiere una función de tales a nivel lógico, por lo que no hay que cambiar la capa de abstracción lógica, ya que todo el código "contaminación". Para poner un ejemplo sencillo, sabemos que la clase base .NET es objeto, si extendemos la clase, no hay duda de que afectará a todos los heredados de la clase del objeto, lo que causaría "contaminación" es, obviamente, no es deseable a.
    Resumen
    • métodos de extensión clase de implementación en C # debe ser una clase estática y el nombre de la clase y la realización de la clase métodos de extensión tiene nada que ver
    • forma de clase para extender la aplicación del método debe ser un método estático
    de los parámetros primeros • métodos de extensión método clase de implementación deben ser utilizar esta palabra clave para especificar la clase implemente los métodos de extensión
    • Poner en práctica los métodos de extensión deben cumplir con el principio de proximidad, utilizar un rango mínimo métodos de extensión con el fin de evitar la "contaminación"

GPS plataforma, la construcción del sitio, desarrollo de software, operación y mantenimiento del sistema, para encontrar una gran tecnología de red bosque!
http://cnsendnet.taobao.com
de Sen Ciencia y Tecnología blog oficial
http://www.cnsendblog.com/index.php/?p=476

Supongo que te gusta

Origin blog.51cto.com/14036626/2482943
Recomendado
Clasificación