Tengo una clase abstracta como esta;Obteniendo el tipo actual en un método genérico estático?
public abstract PropertyBase
{
public static System.Type GetMyType()
{
return !!!SOME MAGIC HERE!!!
}
}
me gustaría hacerla una subclase, y cuando llamo al GetMyType estática(), me gustaría volver tipo de la subclase. Entonces si declaro un subtipo;
public class ConcreteProperty: PropertyBase {}
entonces cuando llamo
var typeName = ConcreteProperty.GetMyType().Name;
espero 'typeName' a ponerse en "ConcreteProperty." Sospecho que no hay forma de hacerlo, pero estoy interesado si alguien conoce una manera de obtener esta información.
(El problema particular que estoy tratando de resolver es el nivel de detalle de las propiedades de dependencia en WPF, me encantaría ser capaz de hacer algo como esto;
class NamedObject : DependencyObject
{
// declare a name property as a type, not an instance.
private class NameProperty : PropertyBase<string, NamedObject> { }
// call static methods on the class to read the property
public string Name
{
get { return NameProperty.Get(this); }
set { NameProperty.Set(this, value); }
}
}
Y casi tener una aplicación, pero no puedo bastante obtener la información que necesito de mi clase NameProperty)
¿Cuál es la razón por la cual es estático? Declarado como virtual o abstracto, tendrías el problema –
POR QUÉ ESTÁTICO: Es un ángulo extraño, y un C# no está diseñado para. Algunas veces su tipo solo puede tener un valor. Entonces 'clase Steve: Persona {}' declara un tipo, pero como solo hay un valor posible, la clase 'Steve' también identifica una instancia. Declarar el tipo 'Steve' declara el singleton 'Steve'. WPF DP son así; no pueden decidir si son datos de instancia, metadatos o tipos. Estoy tratando de doblarlos a todos en una construcción de código. Todo es cajero automático especulativo, pero estoy interesado en seguirlo por su propio bien. –
He aquí por qué necesito esto: generación de una clase parcial para el código descriptivo TypeDescriptor. Los nombres de propiedad creados dinámicamente no pueden entrar en conflicto con las propiedades definidas en el tipo, por lo que necesito una lista de los nombres de propiedad dentro del tipo para hacer una verificación. Este es un código más repetitivo y, por lo tanto, va en codegen. También es un candidato perfecto para estática, ya que no cambia.Entonces, necesito generar una lista que contenga propiedades del tipo actual dentro de un constructor estático. Bueno, demonios, ahora necesito usar cadenas mágicas en la plantilla T4. – Will