c# 中的早、晚结合
当一个对象被分配给特定类型的对象变量时,C# 编译器在的帮助下执行绑定。NET 框架。C# 执行两种不同类型的绑定,它们是:
-
早期绑定或静态绑定 *Late Binding or Dynamic Binding
早期绑定
它在编译时识别并检查方法,或属性。在这个绑定中,编译器已经知道它是什么类型的对象,以及它持有什么方法或属性,这里的对象是静态对象。早期绑定的性能很快,并且易于编码。它减少了运行时错误的数量。
示例:
```cs // C# program to illustrate the // concept of early binding using System;
class Geeks {
// data members public string name; public string subject;
// public method public void details(string name, string subject) { this.name = name; this.subject = subject; Console.WriteLine("Myself: " + name); Console.WriteLine("My Favorite Subject is: " + subject); } }
// Driver class class GFG {
// Main Method static void Main(string[] args) {
// creating object of Geeks class Geeks g = new Geeks();
// Calling the method of Geeks class g.details("Ankita", "C#");
// Calling "mymethod()" gives error // because this method does not // belong to class Geeks or compiler // does not know mymethod() at compile time g.mymethod(); } } ```
编译时错误:
prog.cs(34,5):错误 CS1061:类型“Geeks”不包含“mymethod”的定义,找不到类型“Geeks”的扩展方法“mymethod”。您是否缺少程序集引用? 程序(5,7):(与先前错误相关的符号位置)
解释:在上面的例子中,我们有一个类叫做极客。本课程包含细节()方法。这里,编译器已经知道极客中存在的属性和方法。但是当我们试图调用 mymethod() 时,它会抛出一个错误,因为编译器不知道这个方法。
后期绑定
在后期绑定中,编译器不知道它是什么类型的对象,也不知道它持有什么方法或属性,这里的对象是动态对象。对象的类型是根据它在运行时保存在右边的数据来决定的。基本上,后期绑定是通过使用虚拟方法来实现的。后期绑定的性能比早期绑定慢,因为它需要在运行时进行查找。
示例:在下面的程序中, obj 保存整数类型数据, obj1 保存双类型数据。但是编译器不会在编译时解决这些问题。在运行时,这些动态对象被检测并分别转换成
System.Int32
和System.Double
。这就是为什么运行时解析过程被称为后期绑定。```cs // C# program to illustrate the // concept of late binding using System;
class GFG { static void Main() { // Dynamic objects dynamic obj = 4; dynamic obj1 = 5.678;
// Display the type of objects Console.WriteLine("The type of the objects are :");
// GetType() method is // used to get the type Console.WriteLine(obj.GetType()); Console.WriteLine(obj1.GetType()); } } ```
输出:
```cs The type of the objects are : System.Int32 System.Double
```**
版权属于:月萌API www.moonapi.com,转载请注明出处