文档章节

d语言之接口

轻舞凋零
 轻舞凋零
发布于 2016/02/01 14:39
字数 373
阅读 11
收藏 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
Dlang 2.080.0 版本发布,系统级编程语言

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

冰力
05/13
0
0
系统级编程语言性能大PK的笑话-Go语言

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

chai2010
2013/08/06
0
7
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

没有更多内容

加载失败,请刷新页面

加载更多

70.shell的函数 数组 告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析 20.16/20.17 shell中的函数: ~1. 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段...

王鑫linux
今天
0
0
分布式框架spring-session实现session一致性使用问题

前言:项目中使用到spring-session来缓存用户信息,保证服务之间session一致性,但是获取session信息为什么不能再服务层获取? 一、spring-session实现session一致性方式 用户每一次请求都会...

WALK_MAN
今天
5
0
C++ yield()与sleep_for()

C++11 标准库提供了yield()和sleep_for()两个方法。 (1)std::this_thread::yield(): 线程调用该方法时,主动让出CPU,并且不参与CPU的本次调度,从而让其他线程有机会运行。在后续的调度周...

yepanl
今天
4
0
Java并发编程实战(chapter_3)(线程池ThreadPoolExecutor源码分析)

这个系列一直没再写,很多原因,中间经历了换工作,熟悉项目,熟悉新团队等等一系列的事情。并发课题对于Java来说是一个又重要又难的一大块,除非气定神闲、精力满满,否则我本身是不敢随便写...

心中的理想乡
今天
31
0
shell学习之获取用户的输入命令read

在运行脚本的时候,命令行参数是可以传入参数,还有就是在脚本运行过程中需要用户输入参数,比如你想要在脚本运行时问个问题,并等待运行脚本的人来回答。bash shell为此提 供了read命令。 ...

woshixin
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部