2011-06-23 18 views
13

En C# en sí, ¿hay algo así como "propiedad adjunta" utilizada en WPF?¿Hay alguna propiedad adjunta en C# en sí?

+3

¿Qué quiere decir "In C# itself"? C# es una especificación de idioma, ¿cómo podría tener "propiedades adjuntas"? La pregunta no tiene ningún sentido. –

+2

@EdS ¿Cómo es posible que una especificación de idioma tenga "propiedades adjuntas"? Al incluirlos en la especificación, ¿no? ¿Cómo no tiene sentido la pregunta? Me parece bastante claro. El hecho de que la respuesta es no, no lo hace absurdo o "no es una pregunta real". –

+0

@Martinho Fernandes: suficiente. Supongo que la especificación del lenguaje * podría * llamar luego si se implementaron en ese nivel (como una propiedad). –

Respuesta

18

La respuesta corta es no. La respuesta un poco más larga es que esta es una historia un poco desafortunada. Diseñamos "propiedades de extensión" para C# 4 y llegamos tan lejos como para implementarlas (pero no para probarlas) cuando nos dimos cuenta, oh, espera, de que lo que diseñamos no es realmente compatible con las propiedades de estilo WPF. En lugar de rediseñar y volver a implementar la función, terminamos cortándola.

La versión incluso más tiempo está aquí:

http://blogs.msdn.com/b/ericlippert/archive/2009/10/05/why-no-extension-properties.aspx

-1

Creo que estás pensando en getters y setters.

Se crean así:

public class Person 
{ 
    //default constructor 
    public Person() 
     { 
     } 

    private string _Name; 
    public string Name 
    { 
     //set the person name 
     set { this._Name = value; } 
     //get the person name 
     get { return this._Name; } 
    } 
} 

Más acerca de cómo funcionan aquí: http://msdn.microsoft.com/en-us/library/aa287786(v=vs.71).aspx

2

AttachedProperties son parte de .NET Framework, no forma parte de la especificación del lenguaje C#, y en concreto parte del espacio de nombres System.Activities.Presentation.Model, que es específico de WPF.

+0

Apostaría la pregunta se refiere a 'DependencyProperty' y' 'DependencyObject' en System.Windows', no' System.Activities.Presentation.Model' (que se parece WF cosas) –

2

En WPF, una propiedad adjunta le permite hacer algo como:

<TextBlock Grid.Row="2" Text="I know nothing about grids!" /> 

Esto sería como tener una clase en C# define como:

public class TextBlock 
{ 
    public string Text { get; set; } 
} 

Y ser capaz de hacer esto:

var tb = new TextBlock(); 
tb.Grid.Row = 2; // this line would not compile 

con el fin de hacer este trabajo, que había necesidad de pasar un objeto Grid en su TextBl clase rebaño:

public class TextBlock 
{ 
    public string Text { get; set; } 
    public Grid Grid { get; set; } 

    public TextBlock(Grid grid) 
    { 
     Grid = grid; 
    } 
} 

Pero no creo que haya nada directamente equivalente a la forma en que las propiedades asociadas trabajan en WPF. Tendrás que construirlo a mano.

¿Qué estás tratando de lograr?

0

Puede utilizar la clase ConditionalWeakTable<TKey, TValue> adjuntar arbitraria de éste de una instancia. Puede combinarlo con métodos de extensión para crear un formulario de extension properties, pero desafortunadamente sin usar la sintaxis de la propiedad agradable en C#.

Cuestiones relacionadas