.NET、托管代码(managed code)、反射

托管代码(managed code) 微软特定用语

简单来说 managed code 就是由一个 runtime 管理执行的代码, 这里的 runtime 以 .NET 来说就是指 CLR(Common Language Runtime), CLR 负责将其编译为机械码然後执行, 最重要的是执行阶段时提供几项重要服务, 例如自动记忆体管理(automatic memory management)、安全界线(security boundaries)、型别安全(type safty), managed code 由 .NET 所支援的高阶语言撰写, 经编译器编译後不会得到机械码, 而是得到在 runtime 可编译与执行的(中继语言)Intermediate Language 码, 得到 IL code 想执行时会由 CLR 接管, 并开始 Jusu-In-Time compile, 将 IL code 编译成可实际在 CPU 上执行的机器码, 这样一来 CLR 确切知道你撰写的程序码在做什麽并且可以有效管理它.

反射(Reflection)

因为在 .NET 上所有程序码由 CLR 管理, 所以可以支持反射机制, 可以让我们动态获取物件的类型, 相关功能的类别放在 System.Reflection 命名空间中

using System.Reflection;

class Car
{
  public string color {get; set;}
  
  public void run()
  {
    color = "红色";
    Console.WriteLine("车子变红色并跑起来");
  }
}

Type type = typeof(Car);  // 使用 typeof 取得 类型信息
// 利用 System.Reflection 下的 Activator 类
object o = Activator.CreateInstance(type);  

MethodInfo method = type.GetMethod("run");
method.Invoke(o, null);

PropertyInfo color = type.GetRuntimeProperty("color");
Console.WriteLine(color.GetValue(o));

<<:  [Day13] JavaScript 的原始型别

>>:  [Part 5 ] Vue.js 的精随-元件生命周期 (序)

Gulp 升级4.0 DAY97

由於前面我们都是使用 3.9.1版 来介绍 今天要来介绍 4.0 啦~~ gulp4.0 多了 pa...

Day 29 - Android Studio 这几天以来的统整

Day 29 - Android Studio 这几天以来的统整 离我们铁人完赛只剩一天了,我今天就...

Day11-动态元件

这章节是延伸v-if和v-show管理元件,如何用更简便的方式做tab页签。 v-bind:is 做...

Flipper

在继续实作 domain layer 之前,我们会介绍一个方便日常开发的工具:Flipper。 An...

[2020铁人赛Day28]糊里糊涂Python就上手-Pandas的观念与运用(上)

今日目标 学习了解 Python Pandas 的观念与运用 What is Pandas? Pan...