代码之家  ›  专栏  ›  技术社区  ›  WedTM

get属性是在构造时调用的还是仅在调用该属性时调用的?

  •  3
  • WedTM  · 技术社区  · 16 年前

    我有一段代码,我想将其设置为属性的get{}部分的一部分。但是,在本节中,我将调用SQL查询。

    4 回复  |  直到 16 年前
        1
  •  2
  •   Mark Byers    16 年前

    代码仅在调用属性时运行。您自己很容易验证这一点:

    class MyClass
    {
        public string SqlQuery
        {
            get
            {
                Console.WriteLine("Code was run here!");
                return "foo";
            }
        }    
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Constructing object.");
            MyClass myObject = new MyClass();
            Console.WriteLine("Getting property.");
            string sqlQuery = myObject.SqlQuery;
            Console.WriteLine("Got property: " + sqlQuery);
        }
    }
    

    Constructing object.
    Getting property.
    Code was run here!
    Got property: foo
    
        2
  •  0
  •   adrianbanks    16 年前

    只有在调用属性的getter时,才会调用属性的get部分中的代码。 创建新对象时将不会调用它。

    例外情况是,如果您是从类的构造函数中调用属性的getter。

        3
  •  0
  •   Paul Creasey    16 年前

    lazy loading . 如果您需要证据,请使用类似sql事件探查器的工具。

        4
  •  0
  •   Maximilian Mayerl    16 年前

    从属性读取时,将调用该属性的getter,如下所示:

    var yourVar = this.yourProperty;
    

    分配属性时会调用setter,如下所示:

    this.yourProperty = yourVar;
    

    这有用吗?