2012-04-18 1 views
5

Supongamos este tipo:Obtener el nombre de la instancia del objeto no es el nombre del tipo de objeto en C# 4.0

public class Car { } 

Y puedo crear una instancia de esa:

Car myCar = new Car(); 

Target target = new Target(); 
target.Model = myCar; 

Y este es otro tipo:

public class Target { 

    public object Model { get; set; } 

    string GetName(){ 

    //Use Model and return myCar in this Example 
    } 

} 

como he mostrado en código el método GetName debe utilizar un tipo de objeto (Model) y ret ¿Intentó el nombre de la instancia que es myCar en este ejemplo? ¿Cuál es su sugerencia? ¿Hay alguna forma de hacer esto?

actualización ¿Qué tal esto:

public class Car { 

    public string Title { get; set; } 

} 

y paso a apuntar: target.Model = Car.Title

Y GetName() método devuelve Title?

+0

El nombre de la variable no tiene ni tiene sentido en la lógica comercial – zerkms

+0

¿Entonces si cambia el nombre de la variable, las cosas se rompen? – VVS

+0

¿Por qué 'Modelo' solo es un objeto en lugar de' Car' (o una subclase de él)? –

Respuesta

3

No, esto no es posible. ¿Por qué? Porque myCar es solo un nombre para su instancia Cardentro de el ámbito para el que configuró la variable. Lo que se guarda en target.Model es una referencia en la instancia Car. Entonces, después de su código de muestra, tanto myCar como target.Model hacen referencia a la misma instancia de Car, solo con diferentes nombres. Los nombres mismos no son importantes para la ejecución del programa, es solo un truco que utilizamos para facilitar el diálogo sobre las instancias.

+0

I Actualizar Pregunta ¿qué piensas ahora? – Saeid

+0

ahora ya no sé qué es lo que quieres lograr ... –

4

Los objetos no tienen nombre, a menos que explícitamente tengan una forma de almacenar su nombre. myCar es una variable local; el objeto en sí (el Car) no sabe que se está refiriendo al nombre myCar. Para ilustrar:

Car myCar = new Car(); 
Car car2 = myCar; 
Car car3 = myCar; 

Ahora las tres variables se refieren a la misma Car.

Si desea coches tengan nombres, se puede hacer

public class Car 
{ 
    public string Name { get; set; } 
} 

y luego asignar y leer el nombre que desea que tenga.

+0

Bueno, siempre puedes devolver una lista de nombres ... es una broma ;-) +1. –

+0

I Actualizar Pregunta ¿Qué piensas ahora? – Saeid

1

No existe el "nombre de la instancia". Lo que está diciendo es el nombre de la referencia específica al objeto; podría haber muchas referencias al mismo objeto, todas con diferentes nombres. Además, vincular código y datos (es decir, basarse en el nombre de la variable) es una mala práctica.

Si quieres Car tener algún nombre, entonces nombrarlo explícitamente :

public class Car { 
    public string Name { get; set; } 
} 

Car myCar = new Car { Name = "myCar" }; 
Cuestiones relacionadas