Bueno... he estado echando un ojo a la especificación de C# 3.0 (la que vendrá con Orcas) y hay algunas novedades que me han llamado la atención:
Expresiones lambda
Es una extensión de los anonymous methods que (creo) hará las delicias de los programadores de lenguajes como Scheme o Haskell, ya que más o menos intenta trasladar algunos de los conceptos del lambda-calculus a C#. Una expresión lambda tiene la forma params => expr, donde params define los parámetros que acepta la función y expr la evaluación de los parámetros anteriores. P.ej:
x => x + 1
equivaldría a una función declarada como:
int foo (int x) { return x+1; }
Bueno... yo he puesto int como tipo de datos, pero realmente el tipo real del parámetro de la expresión lambda dependrá del delegate al que se asigne dicha expresión. Esto, si lo unimos con genéricos, tiene bastante buena pinta:
delegate R Func(A arg);
Func<int,int> f1 = x => x + 1; // Ok
Func<int,double> f2 = x => x + 1; // Ok
Func<double,int> f3 = x => x + 1; // Error
El delegate declara un parámetro de tipo A y un valor de retorno de tipo R.
En la 1a asignación el tipo del parámetro (x) se mapea a int y el valor de retorno es mepado a int, y efectivamente la expresión x+1 aplicada a int devuelve int, por lo que la asignación es correcta. En la segunda asignación el tipo del parámetro (x) de mapea a int y el tipo del valor de retorno a double, y la expresión x+1 aplicada a un int, puede devolver un double (cast implícito). Por otro lado en la 3a asignación el parámetro (x) es de tipo double y el tipo del valor de retorno es de tipo int, y dado un double x, la expresión x+1 no puede devolver un int.
Creo que eso de las expresiones lamdba resuelve un problema que existe con los genéricos de C# 2.0: la imposibilidad de hacer métodos genéricos que utilicen algun elemento que no está definido ni en Object ni en ningún tipo de interfaz. P.ej, en C# 2.0 la siguiente función genérica no compila:
public T Add(T a, T b) {
return a+b;
}
La razón es que el operador +, no está definido para la clase Object, pero es que usar la cláusula where, tampoco nos ayuda, porque en C# los operadores se definen como métodos estáticos, así que jamás estarán definidos en una interfaz. Con las expresiones lambda este problema se soluciona (bueno, reconozco que debo comprobarlo :p):
delegate T Add(T arg1, T arg2);
Add<int,int> f1 = x, y => x + y;
Add<double,double> f2 = x,y => x + y;
Inicializadores de objetos
Con esto podemos decir que nos podremos que olvidar de meter constructores sobrecargados...la idea es que si tenemos una classe C, con dos propiedades (públicas) pa y pb, podremos especificar el valor para dichas propiedades en el mismo momento de crear el objeto: C c = new C {pa = 100, pb=200};
Tipos de variables implícitos
Volvemos a los tiempos de javascript!!! No, pero casi porque ya tenemos la palabra clave var! Declarar una variable con var, hará que el tipo de dicha variable sea inferido del tipo resultante de la expresión a la que dicha variable se inicialice (estooo... sigue siendo C#, eh? el tipo de la variable una vez inferido no puede ser modificado ;)):
var i = 5; // Equivale a int i=5, porque la expresión '5' se resuelve a int.
Expresiones Query
MMmm... interesante: La idea es poder utilitzar algo parecido a un lenguaje de consultas (como p.ej. SQL o XQuery) sobre objetos arbitrarios. C# permite utilizar una sintaxis especial sobre todos los objetos de clases que soporten la "query expression patern" (consist en implementar un conjunto de métodos con nombres como Where, Select, ...). En definitiva, el compilador traduce las expresiones query, a llamadas a métodos tradicionales.
Una expresión query tendrá un aspecto como:
from c in customers, o in c.Orders
where o.OrderDate.Year == 2005
orderby o.Total descending
select new { c.Name, o.OrderID, o.Total }
Y nada más por el momento... no comento nada sobre los extension methods, porque ya lo hizo Miguel en un post anterior.
Saludos!
posted on Thursday, November 10, 2005 1:34 PM
Feedback
# re: C# 3.0, algunas novedades
11/18/2007 10:33 PM |
thxx
# re: C# 3.0, algunas novedades
12/3/2007 9:19 PM |
Hi dear, i read this good information and find more interest informations for you. thanks.
# re: C# 3.0, algunas novedades
12/12/2007 6:05 PM |
We offer the largest collection of polyphonic ringtones, monophonic ringtones, mobile videos, color wallpapers, color screensavers, real sounds.
# re: C# 3.0, algunas novedades
1/2/2008 8:27 PM |
If you are looking for the replica watch and information about it, you came to the right place.
# re: C# 3.0, algunas novedades
2/13/2008 9:45 PM |
tskler
# re: C# 3.0, algunas novedades
7/16/2008 7:26 PM |
ne bedel isterim ne hesap sorarim...
# re: C# 3.0, algunas novedades
3/17/2009 9:34 PM |
thanks
# re: C# 3.0, algunas novedades
3/25/2009 5:59 PM |
thanks
# re: C# 3.0, algunas novedades
5/14/2009 8:07 PM |
Play Free Online Games, sports games, massive multiplayer games, action games, puzzle games, flash games and more, casual games.
# re: C# 3.0, algunas novedades
6/3/2009 8:56 PM |
Anzer Honey produced in Turkey and the world, his wife does not have precedents wild flowers covering flora that has the English-German scientists to do research 450-500 varieties in flowers, 80-90 in their many endemic flowers Anzer alone to grow and flower of the bee honey collected continue to trouble World famous Anzer honey flower is healing diseases.
Partly with the first week of June, with snowdrops in snowy regions and greens in the spring at the first step, Anzer, amazing beauty move the peak in July, starting in June and complete in August. In the last week of June to the eyes and flowers in the middle of August until the honey bee who will complete.
Depending on climate conditions Anzer first or second week of August is the right (the harvest), which action is taken with honey from the hive. The impact of weather conditions, the meadow of the (of grass), depending on early appraisal of the variability of supply is the amount of honey production. Very few, or even ever have been a year.
Does not grow on trees so only Anzer Anzer honey of Anzer region should be included in the pollen of flowers growing endemic otherwise Anzer honey is not true. To understand whether the fake fish Anzer pollen analysis is done for.
Anzer honey or other sugar to the external additives are not. Anzer honey without heat treatment is provided. Temperatures above 40 ° C `s and the pollen of Fish neutralized the enzyme that can be put into cold Sagim yapilmaktadir.Anzer honey bread and honey for breakfast is not normally consumed. Anzer honey is usually consumed with a view to healing diseases ..
Hacettepe University in Ankara Anzer honey warranty registration of a calf can be analyzed.
Anzer honey to the grandson of the Ottoman Empire, since the drug was used as is. Anzer honey as a paste strength of the Ottoman Sultans were given. Anzer honey of the healing source of many diseases.
# re: C# 3.0, algunas novedades
10/23/2009 7:33 AM |
EKLEMEYECEK OLURSANIZ Lütfen PM ATIN !
# re: C# 3.0, algunas novedades
10/27/2009 9:20 PM |
tang
# re: C# 3.0, algunas novedades
11/9/2009 3:12 PM |
Thanks for article. Everytime like to read you.
# re: C# 3.0, algunas novedades
12/30/2009 8:21 PM |
thanks
# re: C# 3.0, algunas novedades
1/18/2010 8:01 AM |
OKEY
# re: C# 3.0, algunas novedades
2/4/2010 2:47 AM |
good this page
# re: C# 3.0, algunas novedades
2/20/2010 1:45 AM |
Thank you for this information, very interesting!
# re: C# 3.0, algunas novedades
2/20/2010 1:46 AM |
Thank you for this information, very interesting!
# re: C# 3.0, algunas novedades
2/21/2010 8:36 AM |
tesekkürler
# re: C# 3.0, algunas novedades
2/21/2010 8:37 AM |
How old are you baby ? :)
# re: C# 3.0, algunas novedades
2/28/2010 1:16 AM |
good this page
# re: C# 3.0, algunas novedades
3/18/2010 1:00 AM |
Good recommended website.
# re: C# 3.0, algunas novedades
3/18/2010 1:01 AM |
Good recommended website.