Ni en Java ni en C# puede crear una instancia de una clase abstracta. Siempre necesitará crear una clase concreta que herede de la clase abstracta. Java te permite hacerlo sin nombrar la clase, utilizando clases anónimas. C# no te da esa opción.
(Editado para mostrar un delegado como un reemplazo. No tengo acceso a VS aquí, por lo que no puede compilar, pero esta es la idea)
Por lo general, en Java cuando se utiliza una clase abstracta con un único método abstracto (SAM) lo que realmente está tratando de lograr es pasar algún código como parámetro. Digamos que necesita ordenar una matriz de objetos según el nombre de clase, utilizando Colecciones.sort (Colección, Comparador) (sé Comparador es una interfaz, pero es la misma idea) El uso de una clase anónima para evitar tener que escribir adicional, usted puede escribir algo como
Comparator<Object> comparator = new Comparator<Object>{
@Override
public int compare(Object o1, Objecto2) {
return o1.getClass().getSimpleName().compareTo(o2.getClass().getSimpleName()));
}//I'm not checking for null for simplicity
}
Collections.sort(list, comparator)
En C# 2.0 y más allá de ti puede hacer más o menos lo mismo usando el delegado Comparison<T>
. Un delegado puede pensarse como un objeto de función, o en palabras de Java, una clase con un único método. Ni siquiera necesita crear una clase, sino solo un método que utiliza la palabra clave delegado.
Comparison<Object> comparison = delegate(Object o1, Object o2)
{
return o1.class.Name.CompareTo(o2.class.Name);
};
list.sort(comparison);
En C# 3.0 y más allá se puede escribir menos código usando lambdas y la inferencia de tipos:
list.sort((o1, o2) => o1.class.Name.CompareTo(o2.class.Name))
De todos modos, si está migrando código de forma Java para C# usted debe leer acerca de los delegados ... en muchos casos, utilizará delegados en lugar de clases anónimas. En su caso, está utilizando un método nulo toDoSmth(). Hay un delegado llamado Acción que es más o menos lo mismo, un método sin parámetros y sin retorno.
Actualmente su pregunta es * muy * demasiado vaga. En particular, ha mencionado clases abstractas en el título y en las etiquetas, pero no en el cuerpo del texto. Si tiene en mente una parte específica del código de Java, publíquelo. –
Mencionó una clase llamada "Abstact". Podría ser relevante. –
No, clase Resumen es igual a abstracto :) – jitm