C# 中的 var 和 dynamic 都是用以新闻稿函数的URL,但它的用语和促进作用相同。
var 是用以新闻稿显式类别函数,即校对器会依照函数的调用函数推测该函数的类别。在校对时,校对器会将 var 换成前述的类别。比如:
var i = 10; // 推测 i 的类别为 int
var message = “hello”; // 推测 message 的类别为 string
而 dynamic 则是用以新闻稿静态类别函数,即在校对时不选定函数类别,而要在运转时依照函数的前述类别推测。采用 dynamic 新闻稿的函数在校对时不能展开类别检查和,而要在运转TNUMBERV12V4会放出类别极度。比如:
dynamic obj =“hello”; // obj 的类别为 string
obj = 10; // obj 的类别转变成 int
因而,var 和 dynamic 的主要就差别是类别的推测最佳时机和类别检查和的最佳时机。需要依照具体内容的情景优先选择采用何种URL。
上面得出两个具体内容的范例,展现 var 和 dynamic 的相同用语和效用。假定有两个类 Person,表述如下表所示:
class Person
{
public string Name { get;set; }
public int Age { get; set; }
public void SayHello()
{
Console.WriteLine(“Hello, Im {0}, {1} years old.”, Name, Age);
}
}
采用 var 新闻稿两个 Person 类别的函数:
var person = new Person { Name = “Tom”, Age = 20 };
person.SayHello(); // 输出:Hello, Im Tom, 20 years old.
在这个范例中,校对器会依照 person 的调用函数 new Person { Name = “Tom”, Age = 20 } 推测 person 的类别为 Person,因而可以直接调用 Person 类别的方法 SayHello()。
采用 dynamic 新闻稿两个 Person 类别的函数:
dynamic person = new Person { Name = “Tom”, Age = 20 }; person.SayHello(); // 输出:Hello, Im Tom, 20 years old. person = “Hello”; person.SayHello(); // 放出运转时极度:string does not contain a definition for SayHello
在这个范例中,采用 dynamic 新闻稿函数 person,校对器不能展开类别检查和,而要在运转时依照 person 的前述类别推测。在第一次调用 SayHello() 时,person 的类别为 Person,因而可以正常调用 SayHello()。而在第二次将 person 赋值为字符串 “Hello” 后,再次调用 SayHello() 时,由于字符串类别没有表述 SayHello() 方法,因而会放出运转时极度。