Отражение постоянных свойств/полей в .NET [дубликат]

Так как мы говорим о частном поле, оно не влияет на пользователя Вашего класса.

, Но я рекомендую использовать подчеркивание для частного поля, потому что оно может сделать код легче понять, например:

private int foo;
public void SetFoo(int foo)
{
  // you have to prefix the private field with "this."
  this.foo = foo;

  // imagine there's lots of code here,
  // so you can't see the method signature



  // when reading the following code, you can't be sure what foo is
  // is it a private field, or a method-argument (or a local variable)??
  if (foo == x)
  {
    ..
  }
}

В нашей команде, мы всегда используем префикс подчеркивания для частных полей. Таким образом при чтении некоторого кода, я могу очень легко определить частные поля и сказать им кроме местных жителей и аргументов. В некотором смысле, подчеркивание может пчела, рассматриваемая как краткая версия "этого".

7
задан Patrick Hofman 9 April 2018 в 14:16
поделиться

2 ответа

Это потому, что это поля, а не свойства. Попробуйте:

    public void EnumerateConstants() {        
        FieldInfo[] thisObjectProperties = thisObject.GetFields();
        foreach (FieldInfo info in thisObjectProperties) {
            if (info.IsLiteral) {
                //Constant
            }
        }    
    }

Изменить: DataDink правильно, проще использовать IsLiteral

16
ответ дан 6 December 2019 в 08:44
поделиться

Объекты FieldInfo на самом деле имеют прямо на себе тонну логических значений «IsSomething»:

var m = new object();
foreach (var f in m.GetType().GetFields())
if (f.IsLiteral)
{
    // stuff
}

Что в любом случае сэкономит вам крошечный объем кода по сравнению с проверкой атрибутов.

5
ответ дан 6 December 2019 в 08:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: