Получить имя свойства на владение типом c # - PullRequest
0 голосов
/ 29 ноября 2010

У меня есть следующая конструкция:

class Bla
{
    public string Hello()
    {
        return "Hello my name is " + GetMyVariableName();

    }

    private string GetMyVariableName()
    {
        return "";//do magic here to determine the Variable name at the class that owns the Property
    }
}

class Fasel
{
    public Bla SomeProperty { get; set; }
    public Bla AnotherProperty { get; set; }

    void DoSomeAction()
    {
        SomeProperty = new Bla();
        AnotherProperty = new Bla();

        string name = SomeProperty.Hello(); //this sould return "Hello my name is SomeProperty"

        name = AnotherProperty.Hello(); ////this sould return "Hello my name is AnotherProperty"
    }
}

Это выглядит легко решаемым, поскольку я просто делаю рефлексию, чтобы определить имя в классе-владельце, но в моем особом случае я не могу этого сделать. Мне нужно знать в свойстве, как называется его в классе, которому он принадлежит.

Ответы [ 3 ]

2 голосов
/ 29 ноября 2010

Это совершенно, совершенно невозможно.

На один экземпляр могут ссылаться несколько свойств; нет связи между объектом и свойствами, на которые он ссылается. (За исключением GC, который не скажет вам об этом)

Кроме того, использование JIT может означать, что свойство не обязательно будет задействовано вообще.
Кроме того, локальные имена переменных не существуют в оптимизированных двоичных файлах.

1 голос
/ 29 ноября 2010

Нет способа, которым вы можете надежно сделать это с помощью рефлексии, и это ужасная идея, во-первых, хотеть этого. Можно вызвать метод в экземпляре, даже не объявив переменную для него. Например:

string name=new Bla().Hello();

В этом сценарии, что будет печатать ваш метод ..?

1 голос
/ 29 ноября 2010

Я не думаю, что то, о чем вы просите, возможно. Возможно, один из способов сделать так, чтобы конструктор Bla взял строку, затем при создании экземпляра вы можете передать строку:

SomeProperty = new Bla("SomeProperty");
AnotherProperty = new Bla("AnotherProperty");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...