mejoras del.net framework 2.0 haaron gonzález, mcp, mvp, mcad plexit consulting...
Post on 03-Jan-2015
4 Views
Preview:
TRANSCRIPT
Mejoras del .NET Framework 2.0Mejoras del .NET Framework 2.0
Haaron González, MCP, MVP, MCADHaaron González, MCP, MVP, MCADPlexIT ConsultingPlexIT Consultinghaaron.gonzalez@plexit.com.mxhaaron.gonzalez@plexit.com.mx
ObjetivoObjetivo
Dar una revisión general de las Dar una revisión general de las nuevas características del .NET nuevas características del .NET Framework 2.0Framework 2.0
Nuevas características de los Nuevas características de los lenguajes.lenguajes.
AgendaAgendaIntroducciónIntroducciónNuevas características Nuevas características
del lenguajedel lenguajeClases parcialesClases parcialesTipos “null”Tipos “null”GenericsGenerics
ResumenResumenPreguntas y respuestasPreguntas y respuestas
IntroducciónIntroducción
¿Qué es .NET ?¿Qué es .NET ?
““La tecnología que permite La tecnología que permite integrar personas, integrar personas,
dispositivos e información en dispositivos e información en cualquier lugar y en cualquier cualquier lugar y en cualquier
momento”momento”
IntroducciónIntroducción
.NET Momentum.NET Momentum Lo usa más del 60% de Fortune 100Lo usa más del 60% de Fortune 100 Más de 70M de sistemas con el .NET Más de 70M de sistemas con el .NET
FrameworkFramework Más de 2.5M de desarrolladores .NET Más de 2.5M de desarrolladores .NET
en el mundoen el mundo Foco en productividad, excelencia Foco en productividad, excelencia
operacional y nuevas experienciasoperacional y nuevas experienciasWin32Win32 vs. vs. .NET.NET
Nuevas característicasNuevas características Mejoras al modelo de seguridadMejoras al modelo de seguridad
SecureStringsSecureStringsMejor encriptaciónMejor encriptaciónBasado en rolesBasado en roles
Mejoras a los lenguajesMejoras a los lenguajesClases parcialesClases parcialesTipos nulos Tipos nulos GenericsGenerics
Entre otras más … Entre otras más …
Nuevas características del lenguajeNuevas características del lenguaje
Encripción Web.ConfigEncripción Web.ConfigNuevas características del lenguajeNuevas características del lenguaje
Encripción Web.ConfigEncripción Web.Configvoid ButtonEncryptClick(object sender, void ButtonEncryptClick(object sender, EventArgsEventArgs e) e){{
ConfigurationConfiguration config = config = WebWebConfigurationConfiguration.GetWebConfiguration(Request.ApplicationPath);.GetWebConfiguration(Request.ApplicationPath);
ConfigurationSectionConfigurationSection section = section = config.Sections["connectionStrings"];config.Sections["connectionStrings"];
// Encryption// Encryptionsection.ProtectSection("DataProtectionConfigurationProvider");section.ProtectSection("DataProtectionConfigurationProvider");config.Update();config.Update();
}}
void ButtonDecryptClick(object sender, void ButtonDecryptClick(object sender, EventArgsEventArgs e) e){{
ConfigurationConfiguration config = config = WebWebConfigurationConfiguration.GetWebConfiguration(Request.ApplicationPath);.GetWebConfiguration(Request.ApplicationPath);
ConfigurationSectionConfigurationSection section = section = config.Sections["connectionStrings"];config.Sections["connectionStrings"];
// Decryption// Decryptionsection.UnProtectSection();section.UnProtectSection();config.Update();config.Update();
}}
Nuevas características del lenguajeNuevas características del lenguaje
Clases ParcialesClases ParcialesNuevas características del lenguajeNuevas características del lenguaje
Clases ParcialesClases Parciales Una clase puede estar construida de Una clase puede estar construida de
varios fragmentosvarios fragmentos Cada fragmento lo conocemos como una Cada fragmento lo conocemos como una
Clase ParcialClase Parcial El compilador se encarga de poner los El compilador se encarga de poner los
fragmentos en una sola clasefragmentos en una sola clase
public partial class BankCustomer{ public string LastName;}
public partial class BankCustomer{ public string LastName;}
public partial class BankCustomer{ public override string ToString() { return LastName + “,” + FirstName; }}
public partial class BankCustomer{ public override string ToString() { return LastName + “,” + FirstName; }}
public partial class BankCustomer{ public string FirstName;}
public partial class BankCustomer{ public string FirstName;} public class BankCustomer
{ public string FirstName; public string LastName;
public override string ToString() { return LastName + “,” + FirstName; }}
public class BankCustomer{ public string FirstName; public string LastName;
public override string ToString() { return LastName + “,” + FirstName; }}
====
Nuevas características del Nuevas características del lenguajelenguaje
Clases ParcialesClases Parciales
Nuevas características del Nuevas características del lenguajelenguaje
Clases ParcialesClases Parciales Desarrollado en mente para darle Desarrollado en mente para darle más poder a las herramientas más poder a las herramientas generadoras de códigogeneradoras de código CodeSmithCodeSmith Visual Studio NET 2005Visual Studio NET 2005
Ejemplo:Ejemplo:
// Form1.Designer.cspartial class Form1{ . . // VS Forms designer code! .}
// Form1.Designer.cspartial class Form1{ . . // VS Forms designer code! .}
// Form1.cspublic partial class Form1 : Form{ . . // our code! .}
// Form1.cspublic partial class Form1 : Form{ . . // our code! .}
Nuevas características del Nuevas características del lenguajelenguaje
Clases ParcialesClases Parciales
Nuevas características del Nuevas características del lenguajelenguaje
Clases ParcialesClases Parciales Esta diseñado para el uso de Esta diseñado para el uso de herramientas de generación de herramientas de generación de código.código.
No es necesario que nos No es necesario que nos esforcemos a usarlas – están esforcemos a usarlas – están enfocadas para un fin distinto al enfocadas para un fin distinto al “uso humano.“uso humano.
Nuevas características del Nuevas características del lenguajelenguaje
Tipos de dato Tipos de dato nullnull
Nuevas características del Nuevas características del lenguajelenguaje
Tipos de dato Tipos de dato nullnull Las variables nulas contienen ningún valor Las variables nulas contienen ningún valor … contienen “null”… contienen “null”
A la fecha no existía manera de asignar un A la fecha no existía manera de asignar un valor “null” a un parámetro en bases de valor “null” a un parámetro en bases de datos, normalmente se omite por default.datos, normalmente se omite por default.
int dbValue;...if ( dbReader.IsDBNull(dbReader.GetOrdinal(“FieldName”)) ) dbValue = ???; else dbValue = System.Convert.ToInt32(dbReader[“FieldName”]);
int dbValue;...if ( dbReader.IsDBNull(dbReader.GetOrdinal(“FieldName”)) ) dbValue = ???; else dbValue = System.Convert.ToInt32(dbReader[“FieldName”]);
Las variables nulas permiten diferenciar a un Las variables nulas permiten diferenciar a un valor discreto y un valor nulo.valor discreto y un valor nulo.
Nuevas características del Nuevas características del lenguajelenguaje
Tipos de dato Tipos de dato nullnull
Nuevas características del Nuevas características del lenguajelenguaje
Tipos de dato Tipos de dato nullnullint? dbValue;...if ( dbReader.IsDBNull(dbReader.GetOrdinal(“FieldName”)) ) dbValue = null; // field is null — so store null!else dbValue = System.Convert.ToInt32(dbReader[“FieldName”]);
.
.
.
int? dbValue;...if ( dbReader.IsDBNull(dbReader.GetOrdinal(“FieldName”)) ) dbValue = null; // field is null — so store null!else dbValue = System.Convert.ToInt32(dbReader[“FieldName”]);
.
.
.
sum += dbValue ?? 0; // sum in the value (or 0 if null)sum += dbValue ?? 0; // sum in the value (or 0 if null)
if (dbValue == null) << no value in DB >>else << value in DB to process >>...
if (dbValue == null) << no value in DB >>else << value in DB to process >>...
Otras soluciones:Otras soluciones:Usar un tipo de dato alternativoUsar un tipo de dato alternativoNo usar nulls en la base de No usar nulls en la base de
datos datos
Nuevas características del Nuevas características del lenguajelenguaje
Tipos de dato Tipos de dato nullnull
Nuevas características del Nuevas características del lenguajelenguaje
Tipos de dato Tipos de dato nullnull
Nuevas características del Nuevas características del lenguajelenguaje
GenericsGenerics
Nuevas características del Nuevas características del lenguajelenguaje
GenericsGenerics Nos permite *definir* objetos Nos permite *definir* objetos genéricos pero para *usarlos* de una genéricos pero para *usarlos* de una manera específica.manera específica. ColeccionesColecciones MétodosMétodos ParámetrosParámetros Y más…Y más…
List<BankCustomer> customers;customers = new List<BankCustomer>();
customers.Add( new BankCustomer(...) );...
List<BankCustomer> customers;customers = new List<BankCustomer>();
customers.Add( new BankCustomer(...) );...
Nuevas características del Nuevas características del lenguajelenguaje
GenericsGenerics
Nuevas características del Nuevas características del lenguajelenguaje
GenericsGenerics Nos permite tener:Nos permite tener: Type-safetyType-safety EficienciaEficiencia ReusabilidadReusabilidad Métodos y listas genéricasMétodos y listas genéricas
Cada objeto almacenado en una lista Cada objeto almacenado en una lista es almacenado como un objeto y es almacenado como un objeto y requiere un cast (TipoDeDato) que requiere un cast (TipoDeDato) que nos diga como va.nos diga como va. Boxing - UnBoxingBoxing - UnBoxing
Nuevas características del Nuevas características del lenguajelenguaje
Generics - Generics - constraintsconstraints
Nuevas características del Nuevas características del lenguajelenguaje
Generics - Generics - constraintsconstraints
Podemos especificar restricciones Podemos especificar restricciones en los tipos genéricosen los tipos genéricos
Nos asegura que la entidad Nos asegura que la entidad genérica esta usada genérica esta usada apropiadamente apropiadamente Una forma sencilla de chequeo Una forma sencilla de chequeo
estáticoestáticopublic class SortableList<T> : List<T> where T : IComparable{ }public class SortableList<T> : List<T> where T : IComparable{ }
SortableList<BankCustomer> customers;customers = new SortableList<BankCustomer>();
customers.Add( new BankCustomer(“jim”, “bag”);...customers.Sort();
SortableList<BankCustomer> customers;customers = new SortableList<BankCustomer>();
customers.Add( new BankCustomer(“jim”, “bag”);...customers.Sort();
Nuevas características del Nuevas características del lenguajelenguaje
Generics - Generics - reusabilidadreusabilidad
Nuevas características del Nuevas características del lenguajelenguaje
Generics - Generics - reusabilidadreusabilidad
También nos permite escribir código También nos permite escribir código genérico, reusable…genérico, reusable…
Un ejemplo de una conexión a base Un ejemplo de una conexión a base de datos:de datos:
// // Capa de negocio//DataAccess data; DataSet ds1, ds2;
// access a MS Access database...data = new MSAccessDB(“connection string”);ds1 = data.Retrieve(“Select * ...”);
// now access a SQL Server database...data = new SqlServerDB(“connection string”);ds1 = data.Retrieve(“Select * ...”);
// // Capa de negocio//DataAccess data; DataSet ds1, ds2;
// access a MS Access database...data = new MSAccessDB(“connection string”);ds1 = data.Retrieve(“Select * ...”);
// now access a SQL Server database...data = new SqlServerDB(“connection string”);ds1 = data.Retrieve(“Select * ...”);
DataAccess
SqlServerDB MSAccessDB
Nuevas características del lenguajeNuevas características del lenguaje
Generics – acceso a datosGenerics – acceso a datosNuevas características del lenguajeNuevas características del lenguaje
Generics – acceso a datosGenerics – acceso a datos La premisa es:La premisa es:
Parametrizar métodos de acceso a datos Parametrizar métodos de acceso a datos usando Genericsusando Generics
public class DataAccess{ // a generic method to retrieve records and return as a DataSet... public DataSet Retrieve<T1, T2, T3>(string sConnect, string sql)
where T1 : System.Data.IDbConnection, new() where T2 : System.Data.IDbCommand, new() where T3 : System.Data.IDbDataAdapter, new() { T1 conn = default(T1); // initialize to null for finally block T2 cmd; T3 adapter; DataSet ds; . . .
public class DataAccess{ // a generic method to retrieve records and return as a DataSet... public DataSet Retrieve<T1, T2, T3>(string sConnect, string sql)
where T1 : System.Data.IDbConnection, new() where T2 : System.Data.IDbCommand, new() where T3 : System.Data.IDbDataAdapter, new() { T1 conn = default(T1); // initialize to null for finally block T2 cmd; T3 adapter; DataSet ds; . . .
// cont’d
try { conn = new T1(); // create connection object conn.ConnectionString = sConnect;
cmd = new T2(); // create command object cmd.Connection = conn; cmd.CommandText = sql;
adapter = new T3(); // create data adapter object adapter.SelectCommand = cmd;
conn.Open(); adapter.Fill(ds); } catch (Exception ex) { throw ex; } finally { try { conn.Close(); } catch { } }
return ds;}
// cont’d
try { conn = new T1(); // create connection object conn.ConnectionString = sConnect;
cmd = new T2(); // create command object cmd.Connection = conn; cmd.CommandText = sql;
adapter = new T3(); // create data adapter object adapter.SelectCommand = cmd;
conn.Open(); adapter.Fill(ds); } catch (Exception ex) { throw ex; } finally { try { conn.Close(); } catch { } }
return ds;}
Continuación…Continuación…
Nuevas características del lenguajeNuevas características del lenguaje
Generics – acceso a datosGenerics – acceso a datosNuevas características del lenguajeNuevas características del lenguaje
Generics – acceso a datosGenerics – acceso a datos Para mandar a llamar este método, solo Para mandar a llamar este método, solo
pasamos los tipos que se apegan a las pasamos los tipos que se apegan a las restricciones:restricciones:
using MSA = System.Data.OleDb;using SQL = System.Data.SqlClient;
// // Business Tier//DataAccess data = new DataAccess();DataSet ds1, ds2;
// access a MS Access database...ds1 = data.Retrieve<MSA.OleDbConnection, MSA.OleDbCommand, MSA.OleDbDataAdapter>(“connection string”, “Select * ...”);
// now access a SQL Server database...ds1 = data.Retrieve<SQL.SqlConnection, SQL.SqlCommand, SQL.SqlDataAdapter>(“connection string”, “Select * ...”);
using MSA = System.Data.OleDb;using SQL = System.Data.SqlClient;
// // Business Tier//DataAccess data = new DataAccess();DataSet ds1, ds2;
// access a MS Access database...ds1 = data.Retrieve<MSA.OleDbConnection, MSA.OleDbCommand, MSA.OleDbDataAdapter>(“connection string”, “Select * ...”);
// now access a SQL Server database...ds1 = data.Retrieve<SQL.SqlConnection, SQL.SqlCommand, SQL.SqlDataAdapter>(“connection string”, “Select * ...”);
Nuevas características del lenguajeNuevas características del lenguaje
Generics – ¿Cuándo Generics – ¿Cuándo usarlo?usarlo?
Nuevas características del lenguajeNuevas características del lenguaje
Generics – ¿Cuándo Generics – ¿Cuándo usarlo?usarlo? Un poco más abstracto y Un poco más abstracto y complicado de usarcomplicado de usar
Sin embargo, es más eficienteSin embargo, es más eficienteEl compilador del lenguaje se El compilador del lenguaje se
encarga de interpretar todo, no el encarga de interpretar todo, no el CLRCLR
ResumenResumen
NET en el mundo conectado – NET en el mundo conectado – líder en la industrialíder en la industria
NET Framework 2.0 NET Framework 2.0 Evolución de características y Evolución de características y
muchas mejorasmuchas mejorasPermisible en VB y C#Permisible en VB y C#Nos permite ser más productivos Nos permite ser más productivos
como desarrolladorescomo desarrolladores
Recursos adicionalesRecursos adicionales
NET, C# and VB 2.0:NET, C# and VB 2.0: http://http://msdn.microsoft.com/netframeworkmsdn.microsoft.com/netframework
// http://http://msdn.microsoft.com/vcsharpmsdn.microsoft.com/vcsharp// http://http://msdn.microsoft.com/vbasicmsdn.microsoft.com/vbasic//
top related