d语言之接口
d语言之接口
轻舞凋零 发表于2年前
d语言之接口
  • 发表于 2年前
  • 阅读 10
  • 收藏 0
  • 点赞 1
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: d语言之接口

参考自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();

}



共有 人打赏支持
粉丝 14
博文 99
码字总数 16794
×
轻舞凋零
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: