写点什么

在 C#和 Visual Basic 中使用 Mixin

  • 2011-07-03
  • 本文字数:524 字

    阅读完需:约 2 分钟

Mixin 是对互不相关的类都有用处的一组功能。在支持多重继承的语言中 mixin 以第二基类的形式出现,而在动态强类型语言中则会被直接合并到类型中。C#和 VB 不支持这两种方式,一般通过基类来实现,从而导致类型肿胀或大量的复制粘贴。组合也不是好办法,因为被混入的方法和属性需要委托给内部对象执行。

re-mix 项目提供了另一种选择。通过运行时代码生成,简单的类能和一个或多个 mixin 类合并。这看起来像是多重继承,但实际上则是结合了对象组合与接口匹配来实现。比如说,你想要一个 mixin 来为类添加深拷贝功能。你需要创建一个 ICloneable 接口,以及一个实现该接口的 mixin 类 CloneableMixin。CloneableMixin 自动会获得一个父对象的引用,通过这个引用就可以执行克隆操作。

你可以在运行时将 CloneableMixin 混入任何类中来创建新的类。新类会继承自之前的类,并且实现了 mixin 所实现的全部接口。所有这些接口中的方法都会被委托给一个 mixin 的实例来执行。

另一个 mixin 的用法是重载基类中的行为,在这种情况下,mixin 中的方法将会在生成的类中改写原来类中的方法。

从 Stefan Wenig 和 Fabian Schmied 在 Lang.NET 的演讲中,可以学到更多关于re-mix 和mixin 的东西。

查看英文原文: Mixins for C# and Visual Basic

2011-07-03 10:421889
用户头像

发布了 63 篇内容, 共 24.6 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

模块六作业

Mr.He

架构实战营

索引下推,这个点你肯定不知道!

艾小仙

MySQL MySQL 高可用

Linux之fgrep命令

入门小站

Linux

你知道 JavaScript 中的 Arguments 对象都有哪些用途吗?

编程三昧

JavaScript 大前端 函数 8月日更 Arguments

微信业务架构&学生系统管理系统设计

Geek_dae

架构实战营

情窦初开,原来喜欢这么可爱的

4ye

Python 后端 8月日更 词云

技术调研,IDEA 插件怎么开发「脚手架、低代码可视化编排、接口生成测试」?

小傅哥

Java 小傅哥 低代码 IDEA 脚手架

云原生时代的 APM

尔达Erda

微服务 运维 云原生 APM 应用性能管理

架构实战营模块 6 作业

蔸蔸

架构实战营第一期--模块六作业

clay

架构实战营

苏宁精准测试方案探索和实践

薛飞

精准测试

面向多场景而设计的 Erda Pipeline

尔达Erda

开源 微服务 云原生 企业数字化转型 Go 语言

如何找到靠谱的工长?

escray

生活记录 8月日更 装修记

Spark 源码阅读 01:环境搭建

程序员赤小豆

spark 技术 Spark 源码

Rust从0到1-高级特性-类型进阶

rust 高级特性 类型 Types

html创建表格有那些小技巧,表单中真的有这么多功能吗

你好bk

html html5 大前端 html/css JavaScrip

java毕设开发经典选题

清风

毕业设计

电商系统微服务拆分-模块6

小牧ah

架构实战营

拆分电商系统为微服务

木云先森

架构实战营

Spark 源码阅读 02:从 Spark-Submit 到 Driver 启动

程序员赤小豆

spark 技术 Spark 源码

架构训练营 模块六

小卷儿

在线JSON转Schema工具

入门小站

【架构训练营】模块六作业

zclau

从头配置阿里云服务器

阿Q说代码

SSL证书 8月日更 阿里云服务器 域名备案

用户体验再升级!Erda 1.2 版本正式发布

尔达Erda

云计算 开源 开发者 云原生 Go 语言

Lua 入门到精通( 01 Lua 简介以及软件安装)《做一个脚本高手》

陈皮的JavaLib

lua Linux 运维 脚本语言 8月日更

模块六作业 - 电商系统微服务

babos

#架构实战营

百度地图开发-在地图上实现路线导航 09

Andy阿辉

android Android 小菜鸟 Android端 8月日更

详解可观测性监控系统中的“金三角”

尔达Erda

开源 微服务 运维 云原生 APM

架构训练营模块六作业

喻高咏        

架构实战营

Vue进阶(八十四):Computed 和 Watch 使用与区别

No Silver Bullet

Vue 8月日更

在C#和Visual Basic中使用Mixin_.NET_Jonathan Allen_InfoQ精选文章