c#--早绑定晚绑定
2024-08-31 05:55:11
早绑定early binding:
在编译的时候就已经却确定了将来程序运行基类或者派生类的哪个方法.
在编译代码的时候根据引用类型就决定了运行该引用类型中定义的方法.即基类方法.
这种方式运行效率高.
晚绑定late binding:
只有在运行的时候才能决定运行基类或者派生类中的方法.,C#中用new和override实现了晚绑定
运行的时候将根据该实际类型,而不是引用类型来调用相应的方法.即取决于我们new了什么对象.
因为new关键字不覆写父类中的函数,所以子类协变为父类的时候,会采用父类的show方法,如果直接使用子类的自己的show方法,显示结果就不一样了。 override会覆写父类的方法,所以和new不同
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Super[] arrs = new Super[3];
arrs[0] = new Super();
arrs[1] = new SonOverride();
arrs[2] = new SonNew();
for (int i = 0; i < arrs.Length; i++)
{
arrs[i].Show();
}
SonNew sonNew = new SonNew();
sonNew.Show();
Console.ReadKey();
}
}
public class Super
{
public virtual void Show()
{
Console.WriteLine("Super");
}
}
public class SonOverride : Super
{
public override void Show()
{
Console.WriteLine("Son Override");
}
}
public class SonNew : Super
{
public new void Show()
{
Console.WriteLine( "Son New");
}
}
}
动态绑定 dynamic binding
好文地址
C# 4.0之前的变量声明,在编译时已经决定其类型,虽然C# 3.0提供了var关键字来声明隐式类型,但用var声明的变量终究逃不过编译器的法眼。用dynamic声明变量的好处是,编译器在编译时并不知道它引用对象的确切类型,而要到运行时才知道。因此,我们可以通过动态绑定在运行时来操作一些类型的属性、方法等(如与IronPython,IronRuby,COM互操作),而这些在编译时编译器并不知情。
dynamic d = GetSomeObject();
d.Foo();
此处代码在编译时,编译器并未将Foo()方法绑定到变量d, 而是延时到运行时才绑定。我们可以通过IL DASM查看,会发现,当有动态类型时,会交给DLR去处理。
最新文章
- SpringMVC后台接收list类型的数据的实现方式
- nginx-(/etc/init.d/nginx)启动脚本
- Java多线程synchronized同步
- bzoj-3170 3170: [Tjoi 2013]松鼠聚会(计算几何)
- 在Delphi下,如何使ShowMessage中的按钮中文化
- BZOJ 2301 Problem b
- the railway problem(the example of stack)
- linux系统管理
- easyui源码翻译1.32--accordion(手风琴)
- indexedDB bootstrap angularjs 前端 MVC Demo
- linux 下tomcat的安装
- arm swi 软中断 一例
- PS图层混合算法之六(差值,溶解, 排除)
- JqGrid 列时间格式化
- HBase教程
- 【转】常见六大Web 安全攻防解析
- Shell学习心得(二):传递参数、运算符
- python-GUI,生成ssn
- maven错误
- Spring MVC入门(一)—— SpringMVC的执行流程与常用注解
热门文章
- EMC 存储管理
- 排序系列 之 归并排序算法 —— Java实现
- Gym - 101981K The 2018 ICPC Asia Nanjing Regional Contest K.Kangaroo Puzzle 暴力或随机
- jdbc 接口学习笔记
- B - Substrings Sort
- JavaScript异步加载方案
- js基础---数组方法
- DeltaFish 校园物资共享平台 第五次小组会议
- 24 javascript best practices for beginner(only 23 finally)
- ★Java语法(五)——————————三元运算符