我有一段代码,我想将其设置为属性的get {}部分。但是,在本节中,我调用了一个SQL查询。
我想知道在构造对象时是否进行调用(即Object t = new Object())或仅在调用属性时(即string query = Object.SqlQuery)。
答案 0 :(得分:2)
代码仅在调用属性时运行。您可以轻松自行验证:
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
答案 1 :(得分:0)
只有在调用属性的getter时,才会调用属性的get部分中的代码。 创建新对象时不会调用它。
这个例外是你从类的构造函数中调用属性的getter。
答案 2 :(得分:0)
只有在访问属性时才会执行sql语句,这称为lazy loading。如果你想要证明,可以使用像sql profiler这样的东西。
答案 3 :(得分:0)
当您从中读取属性的getter时,会调用该属性的getter:
var yourVar = this.yourProperty;
分配属性时会调用setter,如下所示:
this.yourProperty = yourVar;
这有帮助吗?