文档章节

d语言之接口

轻舞凋零
 轻舞凋零
发布于 2016/02/01 14:39
字数 373
阅读 11
收藏 0
点赞 1
评论 0

参考自d程序设计语言---我的博客http://my.oschina.net/u/218155/blog?fromerr=SwOkb7Sw fllow me

跟绝大部分opp编程语言的接口类似。

d语言的接口可以增加修饰符 private protected public 

d语言也支持抽象类,使用abstract语法。

d语言也支持,内中嵌套类,方法中嵌套类,

class A{private DbObject _db; alias _db this;}这个是个很变态的语法,A可以任意转换成DbObject对象


import std.stdio;
import std.array;
interface light{
	final void showLight(){
		up();
		down();
	}

	/*
	private:
		void up();
		void down();
	*/
	void up();
	void down();
}

class PhoneLight : light{
	
	int a = 0;

	//override private  void up(){
	override   void up(){
	
		a = 1;
		showstatus();
	}
	//override private void down(){
	override  void down(){
		a = 0;
		showstatus();
	}
	void showstatus(){
		writeln(a);
	}
}

class Shape{
	abstract void draw();
}

class RectangularShape : Shape{
	abstract void drawFrame();
}

class Rectangle:RectangularShape {
	override void draw(){
		writeln("override draw");
	}
}

class DbObject{
	public void connect(){
		writeln("connect to db");
	}
}

class SolidRectangle:Rectangle{
	private DbObject _db;
	alias _db this;
	this(){
		_db = new DbObject();
	}
	override void drawFrame(){
		writeln("override drawFrame");
	}
}

class Outer{
	int x = 0;
	static int x1 = 1;

	void fun(int a){
		writeln(a);
	}
	static class Inner2{
		void func(){
			writeln(x1);
		}
	}
	class Inner{
		int y;
		void gun(){
			fun(x+y);
		}
	}
}

void func(int x){
	class Inner{
		int y;
		void gun(){
			writeln(x+y);
		}
	}
	auto iner = new Inner;
	iner.y =11;
	iner.gun();
}

interface Stack(T){
	@property bool empty();
	@property ref T top();
	void push(T value);
	void pop();
}

class StackImpl(T):Stack!T{
	private T[] _store;
	@property bool empty(){
		return _store.empty;
	}
	@property ref T top(){
		assert(!empty);
		return _store.back;
	}
	void push(T value){
		_store ~= value;
	}
	void pop(){
		assert(!empty);
		_store.popBack();
	}
}

unittest {

	auto stack = new StackImpl!int;
	assert(stack.empty);
	stack.push(111);
	stack.push(222);
	assert(stack.top == 222);
	stack.pop();
	assert(stack.top == 111);


	func(21);
	Outer outer = new Outer;
	auto obj = outer.new Inner;

	auto pl = new PhoneLight();
	//pl.up();
	//pl.down();
	pl.showLight();
	//auto rectangele = new Rectangle();
	auto solid = new SolidRectangle();
	solid.drawFrame();
	solid.connect();
	DbObject db = solid;
	db.connect();

}



© 著作权归作者所有

共有 人打赏支持
轻舞凋零
粉丝 13
博文 100
码字总数 16794
作品 0
昌平
程序员
10月编程语言排行榜:不成大器的D语言

【51CTO独家特稿】今天Tiobe发布了2011年10月编程语言排行榜,本期排行榜我们看到Lua这门语言蹿升很快,而传统的竞争对手C#和PHP正在交替自己的位置。Assembly(汇编语言)正在大踏步的向后退...

zjf_sdnu
2011/10/17
0
0
系统级编程语言性能大PK的笑话-Go语言

喜欢和不喜欢Go语言的都喜欢拿性能PK说事. 流传比较广的是benchmarksgame的PK数据: http://benchmarksgame.alioth.debian.org/u64q/go.php 在 benchmarksgame测试中, Go语言的性能已经由之前...

chai2010
2013/08/06
0
7
Dlang 2.080.0 版本发布,系统级编程语言

近期D语言在版本发布迭代速度上有明显提升,此次D语言 2.080.0 版本更新特性如下: 增强编译时特性可用性 提供更好的 Objective-C 兼容 废弃一些早期版本不推荐使用的类和方法 对标准库的多方...

冰力
05/13
0
0
LDC 1.9.0 发布,基于 LLVM 架构的 D 语言编译器

Kinke 代表LDC团队,很高兴地宣布LDC 1.9,这个版本的重点是: 编译器兼容 dlang 2.079.1 (引入了新的 -i 参数来支持最小D语言运行时); 支持 llvm 6,用于所有预构建包(Win32除外); 可...

冰力
05/13
0
3
Linux C++ 环境搭建 IDE选择 Code::Blocks

在linux下面IDE还是挺多的。 本来打算用elcipse的,但是发现了一个更好更快的C++IDE http://www.codeblocks.org/ Code::Blocks 是一个C++免费的跨平台IDE。 1,下载安装 下载地址: http...

freewebsys
2012/12/01
0
0
hunt framework v1.1.0 发布,帮助开发者提升效率

hunt framework 本次版本主要对易用性进行升级,为了能让更多PHP开发者更容易的去使用D语言框架我们也尝试的引入了类似PHP的一些函数定义。 本次版本主要改进如下: 增加Task工作模式 在Act...

冰力
06/22
0
0
D 语言数据库驱动层 - Dbal

Dbal 是 HuntLabs 开发的D语言(dlang)数据库驱动层,类似 PHP 的 PDO、JAVA 的 JDBC,内置连接池支持。 目前支持的数据库驱动: PostgreSQL 8+ MySQL 5.1+ SQLite 3+ 示例代码 import std...

冰力
05/14
0
0
Hunt framework 1.1.1 发布,可用性修复

Hunt是D语言编写的全栈 web framework,拥有和 C++ 相媲美的性能,有带来的和 PHP、JAVA 一样简单的使用方式,可以看做是 dlang 编写的 Laravel / Spring boot / Django / Rails 框架。 最近...

冰力
06/23
0
0
研发周报:Facebook开源flint 基于D语言的C++静态代码分析器

在过去的一周,Ruby发布了2.1.1版本,并且迎来了它的21岁生日。在开源方面, Facebook开源基于D语言编写的C++静态代码分析器flint 。flint的主要功能是自动提示警报信息。例如,在代码审核系...

LiSteven
2014/05/11
0
0
Hunt framework 1.0.0 正式版,三年来最大更新

Hunt framework 通过三年的不断完善,HuntLabs 所有成员很高兴的对外宣布 hunt 1.0.0 正式版,经过了 0.4.x / 0.5.x / 0.7.x / 0.9.x / 0.10.x 的一些重要分支,我们改进了很多不方便使用的地...

冰力
06/04
0
23

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java示例演示Functor 和monad

This article was initially an appendix in our Reactive Programming with RxJavabook. However introduction to monads, albeit very much related to reactive programming, didn't suit......

Quan全
9分钟前
0
0
微信官方jssdk Demo

1.html部分 <!DOCTYPE html><!-- saved from url=(0028){sh:$selfUrl} --><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta charset="utf-8"......

koloor
12分钟前
0
0
数据库命名规范

https://www.cnblogs.com/pangguoming/p/7126512.html 摘要:当前研发工作中经常出现因数据库表、数据库表字段格式不规则而影响开发进度的问题,在后续开发使用原来数据库表时,也会因为数据...

塔塔米
13分钟前
0
0
java https 请求工具类-通用

package com.ra.common.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintW......

轻量级赤影
13分钟前
0
0
MFC界面套包BCG Pro Edition for MFC正式发布v27.3|附下载

BCGControlBar Professional Edition for MFC是MFC的一个扩展库,您可以用来构建类似于Microsoft Office 2000/XP/2003/2007/2010/2013 和 Microsoft Visual Studio-like(打印、用户定制工具......

Miss_Hello_World
13分钟前
0
0
Spring Cloud云服务 - HongHu架构common-service 项目构建过程

上一篇我们介绍了《整合spring cloud云服务架构 - HongHu云架构common-service代码结构分析》,本节我们将对common-service整个项目进行剖析,将整个构建的流程给记录下来,让更多的关注者来...

itcloud
14分钟前
0
0
Connection reset

在使用HttpClient调用后台resetful服务时,“Connection reset”是一个比较常见的问题,有同学跟我私信说被这个问题困扰很久了,今天就来分析下,希望能帮到大家。例如我们线上的网关日志就会...

夜黑人模糊灬
19分钟前
0
0
如何写PHP规范注释

所有的文档标记都是在每一行的 * 后面以@开头。如果在一段话的中间出来@的标记,这个标记将会被当做普通内容而被忽略掉。 @access 该标记用于指明关键字的存取权限:private、public或prote...

度_
19分钟前
0
0
influxDB Ppostgis

PostGis 1.需要安装postgreSQL,postgis作为插件嵌入到postgreSQL中; 2.使用zip包直接安装,需要修改 makepostgisdb_using_extensions.bat文件中的路径,用户名,密码,然后直接运行; 3.没有...

courtzjl
23分钟前
0
0
多线程Thread-多线程顺序执行

需求:现在有两个任务,任务1和任务2,任务1中有多个线程,并且任务2必须等任务1完成后才能执行。 namespace TThread{ class Program { static void Main(string[] ar...

kaixinguo314
27分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部