¿Es posible tener un campo virtual/abstracto en una clase C#? Si es así, ¿Cómo se hace?Campos virtuales/abstractos en C#
Respuesta
A Virtual/Abstract field? No. Los campos están ahí para contener datos. No hay nada para implementar.
Usted puede define a Virtual/Abstract Property though.
Esto parece hacer lo que necesito. Gracias. – user489041
No, un campo solo se puede asignar a no, se puede anular.
Sin embargo, probablemente podría utilizar una propiedad y que se vería casi el mismo
public class MyClass {
public int MyField; //field
public virtual int MyProperty { get; set; } //property
}
tanto acostumbrarse así:
var x = new MyClass();
Debug.WriteLine("Field is {0}", x.MyField);
Debug.WriteLine("Property is {0}", x.MyProperty);
A menos que el consumidor está utilizando la reflexión, que parece exactamente el mismo.
No. Los campos no pueden ser virtuales \ abstractos pero las propiedades pueden.
La primera frase de la documentación de MSDN responde a su pregunta:
La palabra reservada virtual se utiliza para modificar una declaración de método, propiedad, indexador o evento, y permitir que se reemplaza en una clase derivada.
http://msdn.microsoft.com/en-us/library/9fkccyh4(v=vs.80).aspx
Puede sin embargo tiene propiedades virtuales o abstractos:
public abstract string ModelName { get; set; }
campos son lugares de almacenamiento en una clase - no se puede "anular" o hacer lo virtual.
Las propiedades, por otro lado, se pueden hacer tanto virtuales como abstractas. Las propiedades son simplemente azúcar sintáctica alrededor de los métodos get/set, que hacen el trabajo de recuperar o establecer el valor de la propiedad.
Las propiedades pueden ser virtuales, puede ser que pueda obtener beneficios al respecto. Al menos es muy utilizado en NHibernate.
Básicamente tienes que tener un método para virtualizar, ¿cómo debería funcionar el campo virtual?
No. Tendría que usar una propiedad para lograr lo que parece que hacer.
Una cuestión de edad, pero aquí son mis 2 centavos:
Aunque uno podría no ser capaz de crear un campo virtual - una puede lograr lo que el PO parece estar buscando, lo que es tener el el valor del campo de la clase derivada será diferente que el de la base.
Simplemente asigne el valor "derivado" en el constructor.
(Aunque eso no será suficiente si tiene inicializadores de campo como int i = 1; int j = i;
).
Sin embargo, es posible reemplazar el nuevo campo. Ver this example:
public class Program
{
public class A
{
public int f = 3;
}
public class B
{
public int f = 9;
}
public static void Main(string[] args)
{
B bb = new B();
Console.WriteLine(bb.f); // writes 9
}
}
- 1. Campos de bits en C#
- 2. Renombrar campos y luego deserializar en C#
- 3. Atributos de C# en los campos
- 4. campos no permitidos en la interfaz C#
- 5. Copiando campos en OCaml
- 6. Extraiga los campos de una estructura C
- 7. ¿Pide una lista (C#) por muchos campos?
- 8. C# ID3 biblioteca que admite campos personalizados
- 9. GetHashCode en campos nulos?
- 10. usando Comparer para ordenar IEnumerable en C# por diferentes campos
- 11. Cómo lenta son campos de bits en C++
- 12. Cómo establecer los campos de encabezado Http en Objective-C?
- 13. ¿Se puede aplicar un atributo a múltiples campos en C#?
- 14. ¿Por qué usar propiedades públicas para campos privados en C#?
- 15. C# Reflection - Campos estáticos de clase base en Tipo derivado
- 16. ¿Cómo trabajar con campos de cadenas en una estructura C?
- 17. campos de respaldo Formateo ReSharper para propiedades en C#
- 18. Ocultar campos en Django administrador
- 19. Campos de bits en Scala
- 20. Sumar campos en sqlAlchemy
- 21. ¿Demasiados campos en MySQL?
- 22. Campos sucios en django
- 23. Campos ocultos en AngularJs
- 24. campos Excluyendo en JAXB
- 25. Mejorar los campos de consulta en MongoDB
- 26. luabind y campos estáticos
- 27. Buscar en todos los campos en Lucene
- 28. C# - cierres sobre campos de clase dentro de un inicializador?
- 29. ¿Por qué las interfaces C# no pueden contener campos?
- 30. Desbordamiento en los campos de bit
No, un campo es solo de datos y no contiene ninguna lógica. No hay nada que anular, por lo que no tiene sentido tener campos virtuales. –
¿Hay alguna manera de declarar un campo estático en la clase base, pero no proporcionar un valor, pero hacer que todas las subclases proporcionen el valor real? – user489041
Imo un campo es un detalle de implementación, por lo que ** no debe ** ser posible. – BrokenGlass