Desarrolador Cinco Estrellas – Visual Basic .NET 2005 ... · Observe aún que contiene los...

36
DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional) Página: 1 Desarrolador Cinco Estrellas – Visual Basic .NET 2005 + Visual C# .NET 2005 + Visual Studio .NET 2005 Ejercicios

Transcript of Desarrolador Cinco Estrellas – Visual Basic .NET 2005 ... · Observe aún que contiene los...

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 1

Desarrolador Cinco Estrellas – Visual Basic .NET 2005 +

Visual C# .NET 2005 + Visual Studio .NET 2005

Ejercicios

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 2

Índice Novos Controles.................................................................................................................. 3 WebBrowser ....................................................................................................................... 3 Menus e Toolbars................................................................................................................ 7 Outros Controles ............................................................................................................... 19 CÓDIGOS DO PPT .......................................................................................................... 22

Stack.............................................................................................................................. 22 Semáforo ....................................................................................................................... 22 Serial Port...................................................................................................................... 23 Partial Class .................................................................................................................. 23 Classe My...................................................................................................................... 24 Statements ..................................................................................................................... 25 Overloading de Operador.............................................................................................. 25 Usando um Provider ..................................................................................................... 26

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 3

Nuevos Controles

WebBrowser Objetivo: Montar un formulario Windows Forms con el control WebBrowser. Este control permite navegar en páginas WEB a través de un formulario. Atención: Estos ejercicios pueden hacerse tanto con el Visual Studio .NET 2005 Beta 2, como con la versión Visual Basic 2005 Express Edition.

1. Abra el Visual Studio 2005 beta 2. Seleccione el menú File / New Project para crear un nuevo Proyecto según la siguiente figura. Note que el lenguaje es el Visual Basic, pero si usted quiere crear en Visual C# no hay ningún problema ya que los pasos son los mismos.

2. A continuación presione el botón OK. Enseguida será creado el formulario Form1, que es el default. Exclúyalo y cree uno nuevo llamado FormWebBrowser. Para ello, en el Solution Explorer haga clic con el botón derecho sobre el nombre

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 4

del proyecto DCE1 y seleccione Add / Windows Form. Digite el nombre del formulario y OK.

3. Exhiba la Toolbox (menú View / Toolbox).

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 5

4. Monte un formulario con los siguientes controles: 1 Label, 1 TextBox (txtURL), 1 Button (btnURL) y 1 WebBrowser. Para el control WebBrowser ajuste las propiedades Dock a Bottom.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 6

5. Haga un doble clic en el botón y digite el siguiente código para navegar. VB.NET Public Class FormWebBrowser Private Sub btnURL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnURL.Click WebBrowser1.Navigate(txtURL.Text.Trim) End Sub End Class C# private void btnURL_Click(object sender, EventArgs e) { webBrowser1.Url(txtURL.Text.Trim); }

6. Para ejecutar cualquier formulario en el Solution Explorer, haga clic con el botón derecho en el DCE1 y seleccione Properties. Altere la propiedad Startup Object para el nombre del formulario que será ejecutado. Este procedimiento deberá ser ejecutado para todos los formularios creados. Es como si fuese un formulario inicial a partir del cual se llama a los demás.

7. Presione F5 para ejecutar. Suministre una URL y haga clic en el botón GO para

abrir la página dentro del control webbrowser. Altere el tamaño de la ventana a

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 7

través de los bordes y note que el control también se adecua gracias a la propiedad DOCK.

Menús y Toolbars Objetivo: Mostrar los nuevos recursos y controles de menús y barras de navegación.

1. Adicione un nuevo Windows Form llamado MenúsToolbars al Solution Explorer. 2. Exhiba la Toolbox y arrastre los controles MenúStrip, StatusStrip y

ContextMenúStrip.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 8

3. Observe que estos controles aparecen en el pie de página del formulario. Seleccione el MenúStrip y monte un menú según la siguiente figura. Adicione otras opciones de menú según sus necesidades.

4. Seleccione el control StatusStrip y seleccione StatusLabel y ProgressBar. De este modo se tiene en el mismo control diferentes posibilidades de configuraciones y tipos de controles. Es posible además agregar un DropDownButton y un SplitButton. Con ello el formulario es optimizado y los códigos relativos a los controles resultan más simples de escribirse.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 9

5. Seleccione el ContextMenúStrip y agregue las siguientes opciones. Estas opciones se asociarán a los controles contenidos en el formulario para facilitarle los atajos a los usuarios y ofrecer funcionalidades relativas al contexto.

6. Cuando monta un formulario conteniendo una fuente de datos, existe una barra de navegación que está a asociada a la fuente de datos proporcionando nuevas funcionalidades, especialmente de navegación en los registros. Cree un nuevo Windows Forms llamado BancoDatos. El primer paso es montar una fuente de datos, por lo tanto, seleccione el menú Data / Show Data Sources. En el VS.Net 2005 el concepto de fuente de datos cambió, ya que en esta ventana de Data Sources usted define un conjunto de informaciones que podrán ser usadas en todo el proyecto.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 10

7. Haga clic en Add New Data Source. Note que la ventana muestra las opciones

para que se seleccione la fuente formada por un Database, un Web Service o un Object. Seleccione Database y haga clic en Next.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 11

8. Aquí tenemos la parte de conexión con el banco de datos. En este momento haga clic en New Connection para definir una nueva conexión, suministre todos los datos necesarios y pruebe la conexión. Observe el nombre del Data Source al usar el Microsoft SQL Server (SqlClient), ya que es él que hace el acceso al SQL Server 7 o superior. El banco de datos a ser usado es el Northwind.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 12

9. En caso de que quiera cambiar, haga clic en el botón Change y seleccione el

Provider adecuado.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 13

10. Finalmente, haga clic en el botón OK y observe como quedó la string de conexión.

11. Haga clic en el botón Next y deje el chebox seleccionado para que esta string de

conexión sea almacenada en el archivo de configuración con el propósito de facilitar el acceso y el uso.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 14

12. Haga clic en Next para exhibir la lista conteniendo todos los objetos del banco de

datos Northwind. Seleccione la tabla Products con algunos campos. Preste atención al nombre del DataSet que será generado. Haga clic en Finish para terminar el proceso.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 15

13. Vea la ventana Data Sources conteniendo la fuente de datos seleccionada en los

pasos anteriores. Una de las grandes facilidades es que se puede definir para cada campo cómo será que dicho campo le aparecerá al usuario, así como la tabla, que es DataGridView, Details o Customize.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 16

14. Después arrastre la tabla Products hacia dentro del cuerpo del formulario y vea

que los datos son exhibios de acuerdo con el tipo definido en la exhibición. Si es un DataGridView será exhibido un GridView, si es un Details será exhibido como detalles de la tabla.

15. Esta operación montó en el pié de página varios controles que son: el

NorthwindDataSet, el ProductsTableAdapter, el ProductsBindingSouce y el ProductsBindingNavigator, el que es el control asociado a la barra de navegación es el BindingNavigator.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 17

16. Esta barra de navegación está siempre vinculada a una fuente de datos.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 18

17. Ejecute este formulario y navegue en los registros a través de la barra de navegación. Observe aún que contiene los íconos de Add New, Delete y Save, los que implementan dichas funcionalidades directamente en el control evitándole muchos códigos al desarrollador.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 19

Otros Controles 1. Adicione un nuevo Windows Form llamado tableLayout al Solution Explorer.

Arrastre el control TableLayoutPanel hacia el formulario. Note que se genera una tabla con 2 líneas y 2 columnas. Abra la Smart Tag y configure el control según le resulte necesario.

2. En caso de que quiera ajustar el layout a través de la ventana de edición, seleccione Edit Rows y Columns. Este control es excelente para montar un layout conteniendo solamente un control en cada célula, permitiéndole al desarrollador un ajuste fino al formulario.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 20

3. Adicione un nuevo Windows Form llamado Reports al Solution Explorer. Exhibir informes generados en el SQL Reporting Services en un formulario requiere un control específico para ello. Este control es el ReportViewer, por lo tanto, arrástrelo hacia el formulario.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 21

4. Todos los informes generados con el SQL Reporting Services serán instalados en un servidor de WEB, y se tendrá acceso a los mismos vía http. Como la mayoría de los aplicativos necesitan informes, esta herramienta fue elaborada para ofrecer productividad con alto grado de complejidad en el análisis de datos. El desafío es exhibir estos informes en un formulario, y ahora, con este control todo se vuelve más fácil.

5. Básicamente las propiedades ReportPath y ReportServerUrl son las principales de este control. Por lo tanto usted puede alterar las propiedades en tempo de ejecución.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 22

CÓDIGOS de los PPT – VB.NET

Stack ' Generic MyStack class Public Class MyStack(Of T) Private frames As T() Private pointer As Integer = 0 Public Sub New(ByVal size As Integer) frames = New T(size) {} End Sub Public Sub Push(ByVal frame As T) frames(pointer) = frame pointer += 1 End Sub Public Function Pop() As T pointer -= 1 Return frames(pointer) End Function End Class Dim s As New MyStack(Of Integer)(7) For f As Integer = 0 To 6 s.Push(f) Next f ' Prints 6543210 For f As Integer = 0 To 6 Console.Write( s.Pop().ToString()) Next f

Semáforo Um semáforo é criado com um contador, o qual representa um número total de threads que podem sem acessadas pelo recurso protegido. Para usar um semáforo, a thread chama

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 23

o método WaitOne. Se o contador da chamada estiver disponível para retornar imediatamente, o contador é reduzido para 1. Se não estiver disponível para este pedido, então a instância bloqueia o pedido WaitOne até que o contador esteja disponível. Quando a thread usada for finalizada deverá chamar o método Release, o qual reduz o contador para 1. ‘ Cria um semáforo com um contador de 3 Dim sem As new Semaphore(3) ‘ Bloqueia até um contador disponível sem.WaitOne() ‘ Usa o recurso protegido ‘ Release o semáforo sem.Release()

Serial Port A comunicação serial não é suportada pelo .NET nas versões anteriores a 2005, o acesso era feito via P/Invoke no Win32 APIs. Agora temos uma classe nova chamada System.IO.Ports com funcionalidades completas para serial I/O. A classe principal é a SerialPort, o qual suporta acesso físico e virtual, por exemplo, aqueles suportados por dispositivos com USB. Temos duas formas de suporte I/O: event-driven (onde o objeto SerialPort é registrado no tratamento do evento) e blocking via métodos Read e Write, o qual também permite acesso de Stream através da SerialPort. Imports System.IO.Ports ... Dim sp As New SerialPort("COM1", 19200) sp.ReadTimeout = 3000 sp.WriteTimeout = 3000 sp.Open() ... sp.Read(byteBuff, 0, nBytesToRead);c

Partial Class Veja um exemplo do uso de Partial Class. O VB é mais flexível que o C# e o único erro aqui é que a declaração do campo “i” ocorre novamente e este já foi declarado na parte 2.

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 24

' Demo.Part1.vb Imports System Partial Public Class Demo Public Sub New() Console.Write("P1") End Sub End Class ' Demo.Part2.vb Partial Public Class Demo Private i As Integer End Class ' Demo.Part3.vb ' OK no Visual Basic Public Class Demo ' Erro! Private i As Integer ' OK Private j As Integer Public Sub Test() ' OK no Visual Basic Console.Write("P3") End Sub End Class

Classe My ' Exibe os argumentos da linha de comando For Each s As String In My.Application.CommandLineArgs MessageBox.Show(s) Next ' Exibe os arquivos do Visual Studio em My Documents For Each s As String In My.Computer.FileSystem.GetFiles( _ My.Computer.FileSystem.SpecialDirectories.MyDocuments, _ False, "Visual Studio*.doc") MessageBox.Show(s) Next ' Testa as permissões do usuário

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 25

If My.User.IsInRole( "Administrators") Then MessageBox.Show( "Hello Administrator " + My.User.Identity.Name) End If ' Chama um método do Web Service MessageBox.Show( My.WebServices.DemoService.HelloWorld())

Statements ' Visual Basic 2005 Using p As New Pen(c) g.DrawLine(p, 0, 0, 50, 50) End Using

Overloading de Operador ' Classe com overload de + Public Class Dem Private x As Byte Private y As Byte Public Sub New(ByVal i As Byte, ByVal j As Byte) Me.x = i Me.y = j End Sub Public Overrides Function ToString() As String Return String.Format("[{0},{1}]", x, y) End Function Public Shared Operator +( ByVal d1 As Dem, _ ByVal d2 As Dem) As Dem Return New Dem( d1.x + d2.x,d1.y + d2.y) End Operator End Class ' Teste Dim d1 As Dem = New Dem(1, 0) Dim d2 As Dem = New Dem(2, 2) Dim d3 As Dem = d1 + d2 d3 += d1 Trace.Write(d3) ' Exibe [4,2]

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 26

Usando um Provider Import System.Data.Common Dim factory As new DbProviderFactory = DbProviderFactories.GetFactory("provider-name") Dim con As new DbConnection=factory.CreateConnection() Dim cmd As new DbCommand = con.CreateCommand() Dim dt As new DataTable = DbProviderFactories.GetFactoryClasses() Dim factory As new DbProviderFactory = DbProviderFactories.GetFactory(dt.Rows[x]) Ou Dim factory As new DbProviderFactory = DbProviderFactories.GetFactory( dt.Select("InvariantName='System.Data.SqlClient'") [0]["InvariantName"].ToString()); Dim dt As DataTable = conn.GetSchema("MetaDataCollections") Dim dt As DataTable = conn.GetSchema("collection-name") Dim dt As DataTable = conn.GetSchema("collection-name", restriction-array)

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 27

CÓDIGOS dos PPT – C#

Usando um Provider Nullable

Permitem tipos para suporte valores null Nullable<int> i = 3; bool b = i.HasValue(); int j = i.Value();

EventHandler Define tratamento de eventos

delegate void EventHandler<T>(Object sender, T e) where T : EventArgs;

Usando um Provider // using // System.Collections.Generic; Stack< Employee > employees = new Stack< Employee >(); // Usa método Push // Parâmetros tipo Employee // Não requer conversão employees.Push( new Employee() ); // Usa método Pop // Retorno é tipo Employee // Não requer conversão Employee employee = employees.Pop(); Stack< int > sizes = new Stack< int >(); // Sem boxing

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 28

sizes.Push( 42 ); // Sem unboxing int size1 = sizes.Pop(); sizes.Push( 77 ); // Error! // Erro em tempo de compilação sizes.Push( new Employee() ); // Código OK int size2 = sizes.Pop(); // Generic MyStack class public class MyStack< T > { private T[] frames; private int pointer = 0; public MyStack( int size ) { frames = new T[ size ]; } public void Push( T frame ) { frames[ pointer++ ] = frame; } public T Pop() { return frames[ --pointer ]; } } MyStack< int > s = new MyStack< int >( 7 ); for ( int f = 0; f < 7; ++f ) s.Push( f );

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 29

// Prints '6 5 4 3 2 1 0 ' for ( int f = 0; f < 7; ++f ) Console.Write( s.Pop() + " " ); class MyList< K, V > where K : IComparable, IFormattable where V : ValueBase, new() { // ... } class ValueBase {} class Widget : ValueBase {} class Thing : ValueBase { public Thing( int i ) {} } // 1 - OK MyList<int, Widget> list1 = new MyList<int, Widget>(); // 2 - Error! MyList<int, string> list2 = new MyList<int, string>(); // 3 - Error! MyList<int, Thing> list3 = new MyList<int, Thing>(); // 4 - Error! MyList<Point, Widget> list4 = new MyList<Point, Widget>();

TraceSource TraceSource ts = new TraceSource("Source1"); ts.Switch.Levels = SourceLevels.Information;

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 30

Semáforo // Cria um semáforo com um contador de 3 Semaphore sem = new Semaphore(3); // Bloqueia até um contador disponível sem.WaitOne(); // Usa o recurso protegido // Release o semáforo sem.Release();

Compressão // Ler dados compactados de um arquivo string decomp = String.Empty; FileStream fs = new FileStream( @"c:\temp\compress.dat", FileMode.Open, FileAccess.Read, FileShare.Read); GZipStream zipStrm = new GZipStream(fs, CompressionMode.Decompress); using (StreamReader sr = new StreamReader(zipStrm)) { decomp = sr.ReadToEnd(); } Console.WriteLine(decomp);

SecureString // Cria uma SecureString SecureString ss = new SecureString(); // Adiciona caracteres e trava a string ss.AppendCharacter('a'); ss.AppendCharacter('b'); ss.MakeReadOnly(); // Recupera conteúdo IntPtr uniString =

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 31

Marshal.SecureStringToGlobalAllocUni(ss); String s = Marshal.PtrToStringUni(uniString); Console.WriteLine("String is '{0}'", s); // Zero e free Marshal.ZeroFreeGlobalAllocUni(uniString);

HttpListener // Cria um HttpListener HttpListener lst = new HttpListener(); // Adiciona um prefixo para o listener lst.Prefixes.Add( string.Format(" http://localhost/{0}/ ", args[0])); // Inicia o listening lst.Start(); while (true) { // Bloqueia aguardando conexão HttpListenerContext ctx = lst.GetContext(); // Faça algo... }

Porta Serial using System.IO.Ports; ... SerialPort sp = new SerialPort("COM1", 19200); sp.ReadTimeout = 3000; sp.WriteTimeout = 3000; sp.Open(); ... sp.Read(byteBuff, 0, nBytesToRead);c

Customização de Culturas // Cria um novo objeto CultureAndRegionInfoBuilder // baseado em culture en-US CultureAndRegionInfoBuilder carib = new

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 32

CultureAndRegionInfoBuilder( new CultureInfo("en-US"), new RegionInfo("US"), "en", "US", "microsoft"); // Registra nesta máquina no deploy carib.Register(); // Salva em XML carib.Save("c:\temp\myculture.xml"); // Instancia o novo objeto CultureInfo CultureInfo ci = new CultureInfo("en-US-microsoft);

Códigos Independentes // using System.Collections; // Employees Stack employees = new Stack(); // Use método Push // Parâmetro é um objeto // Usa conversão implícita employees.Push( new Employee() ); // Usa método Pop // Retorna um objeto // Precisa converter Employee employee = (Employee) employees.Pop(); // Integers Stack sizes = new Stack(); // Box sizes.Push( 42 ); // Unbox int size1 = (int) sizes.Pop(); // Errado mas compila OK sizes.Push( 77 ); sizes.Push( new Employee() ); // Compila OK mas gera

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 33

// InvalidCastException int size2 = (int) sizes.Pop();

Tipos Partial // Demo.Part1.cs using System; public partial class Demo { public Demo() { Console.Write( "P1" ); } } // Demo.Part2.cs public partial class Demo { private int i; } // Demo.Part3.cs // Erro 1 public class Demo { // Erro 2 private int i; // OK private int j; public void Test() { // Erro 3 Console.Write( "P3" ); } }

Métodos Anonymous // C# 1.0 this.saveButton.Click += new EventHandler( this.SaveClick ); private void SaveClick( object sender,

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 34

EventArgs e ) { this.Save(); } // C# 2.0 this.saveButton.Click += delegate { this.Save(); }; // using System.Threading; // C# 1.0 Thread task = new Thread( new ThreadStart( this.Background ) ); private void Background() { Trace.Write( "1.0" ); } // C# 2.0 Thread task = new Thread( delegate(){ Trace.Write( "2.0" ); } );

Iterators public class Payroll : IEnumerable< Emp > { private Emp[] pay; public IEnumerator< Emp > GetEnumerator() { foreach ( Emp e in pay ) yield return e; } public IEnumerable< Emp > Forward { get { return this; } } public IEnumerable< Emp > Reverse

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 35

{ get { // for ( int e = ... yield return pay[ e ]; } } } Payroll p = new Payroll(); foreach ( Emp e in p ) Console.WriteLine( e.Net ); foreach ( Emp e in p.Reverse ) Console.WriteLine( e.Net );

Delegate Inference // C# 1.0 this.Load += new EventHandler( this.FormLoad ); this.Update( new CallBack( this.MyMethod ) ); // C# 2.0 this.Load += this.FormLoad; this.Update( this.MyMethod );

Qualificador Alias // C# 2.0 using System; namespace Imaging { public class Console {} public class System { public void Demo() { // Erro! Console.Write("6x9"); // OK global::System.Console

DCE 1a. Estrella – VB.NET 2005 + Visual C# .NET 2005 + VS.Net 2005 Autor: Renato I. Haddad (Microsoft Most Valuable Professional)

Página: 36

.Write("42"); } } }

Usando um Provider using System.Data.Common static DbProviderFactory factory = DbProviderFactories.GetFactory("provider-name") DbConnection con = factory.CreateConnection() DbCommand cmd = con.CreateCommand() Provider Enumeration DataTable dt = DbProviderFactories.GetFactoryClasses() DbProviderFactory factory = DbProviderFactories.GetFactory(dt.Rows[x]) - ou - DbProviderFactory factory = DbProviderFactories.GetFactory( dt.Select("InvariantName='System.Data.SqlClient'") [0]["InvariantName"].ToString()); Schema Discovery API Recebe uma lista dos Schemas: DataTable dt = conn.GetSchema("MetaDataCollections") Recebe um Schema específico: DataTable dt = conn.GetSchema("collection-name") Recebe detalhes do Schema: DataTable dt = conn.GetSchema("collection-name", restriction-array)