FxCop es una herramienta libre de analisis de codigo para .net. Esta herraminenta analiza el asembly y verifica si las guidelines fueron aplicadas.
Las guidelines se encuentran en .NET Framework SDK\Reference\Design Guidelines for Class Library Developers. Estas traen información y buenas prácticas sobre: nomenclaturas, patrones de manejo de errores, patrones de diseño, entre otros temas.
Es cierto que tilizar este analizador no nos asegura realizar codigo 100% seguro, pero si nos permite realizar un codigo mas robusto y de mayor calidad, reduciendo asi los riesgos.Posee una interfaz bastante sencilla, simple de usar y amigable, puden descargarlo desde aqui ,
tambien posee una version de linea de comandos que no la use.
Analizador de Codigo (best-practices)
Ejemplo de Generics en C# 2.0
Vamos a ver una de las nuevas características de C# 2.0.
A medida que los proyectos son mas complicados, los desarrolladores necesitamos incrementar de la mejor manera la reutilización y personalizacion del Software. Para conseguir una alto nivel de reutilización de código, los desarrolladores podemos utilizar esta característica llamada Generics.Usando Generics, podemos crear clases templates que soporten cualquier tipo. Cuando instanciamos la clase, especificamos el tipo que queremos usar, y desde este punto, nuestro objeto es creado para el tipo que nosotros elegimos.
Veamos un ejemplo de como crear una clase genérica en C# 2.0
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;namespace PruebaGenerics
{
public class
MyCustomList<MYTYPE>
{
private ArrayList _mList= new ArrayList();
public MYTYPE this[int index]
{
get
{
return (MYTYPE)_mList[index];
}
set
{
_mList[index] = value;
}
}
public int Add(MYTYPE value)
{
return _mList.Add(value);
}
public void Remove(MYTYPE value)
{
_mList.Remove(value);
}
}
}
Aquí, MyCustomList es creada en un ArrayList. Pero estos métodos e indexaciones son fuertemente tipeadas,
using System;
using System.Collections.Generic;
using System.Text;
using PruebaGenerics;namespace GenericsConsole
{
class Program
{
static void Main(string[] args)
{
MyCustomList<int> lEnteros = new MyCustomList<int>();
lEnteros.Add(23);
Console.WriteLine("lista con entero: "+lEnteros[0]);
MyCustomList<string> lString = new MyCustomList<string>();
lString.Add("Te gusto?");
Console.WriteLine("lista con string: "+ lString[0]);
Console.ReadKey();
}
}
}
Lo que hice fue agregar un nuevo proyecto de consola a la solución para probar la clase MyCustomList. Después hice dos declaraciones de la clase, una instancia para almacenar enteros "lEnteros" y otra para string "lString", como podemos ver solo le indicamos entre "< > " el tipo de datos que sera soportado y así podemos utilizar la misma clase para ambos casos.......