文档章节

d语言之接口

轻舞凋零
 轻舞凋零
发布于 2016/02/01 14:39
字数 373
阅读 12
收藏 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();

}



© 著作权归作者所有

共有 人打赏支持
上一篇: d语言之struct
下一篇: d语言类的继承
轻舞凋零
粉丝 13
博文 100
码字总数 16794
作品 0
昌平
程序员
私信 提问
10月编程语言排行榜:不成大器的D语言

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

zjf_sdnu
2011/10/17
0
0
Tiobe 2011年10月编程语言排行榜

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

hmly
2011/10/19
6K
28
开源的系统级编程利器:D语言

在Digital Mars公司的D语言首 页上,放置着这样一段话“计算机编程语言门类众多,其来源大致可分为两种途径。一类新语言来自于极具创新精神的学术界;而一类则源于关注研发结合和互联网 的新...

小卒过河
2011/10/11
4.8K
21
2011年9月编程语言排行榜:D语言重返Top 20

Tiobe公布了最新的2011年9月编程语言排行榜,其中D语言取代在8月第一次进入Top 20的F#语言,重返前20。和F#第一次进入Top 20不同,D语言并非首次进入,它从2007年至2009年中期,一直在Top 2...

vVqsGHcN
2011/09/13
2.2K
5
Dlang 2.080.0 版本发布,系统级编程语言

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

冰力
2018/05/13
837
6

没有更多内容

加载失败,请刷新页面

加载更多

vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
今天
2
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
8
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
5
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部