文档章节

d语言之类

轻舞凋零
 轻舞凋零
发布于 2016/02/01 14:27
字数 453
阅读 18
收藏 0

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

d语言的类,同所有的支持oop的语言一致,只是有一点点差别

类的一些基本属性

    enum,static变量,他们初始化一次后不可改变

     支持普通的方法

构造器语法 为this()和    ~this()

也支持静态构造器 static this() static ~this()

final可以定义不可覆盖的类       

 类也支持property方法           

this() 的执行顺序是: 分配内存,初始化,冠名,构造函数的调用

~this()的步骤 对象冠名后是活的。所有引用消失,检查是否可以回收,某个时间点回收,释放已解除分配的对象

完整的例子

import std.stdio;


class CrawlerParser {

	enum my_flate = 2;
	static immutable defualtOpt = "byCurl";
	string currentOpt = defualtOpt;
	
	uint catchTime,catchWait;	

	static CrawlerParser instance;
	static int test_static ;
	static this(){
		//instance = new CrawlerParser;
		test_static = 11;
	}

	static string getDefualtOpt(){
		return defualtOpt;
	}

	uint getCatchTime(){
		return catchTime;
	}
	uint getCatchWait(){
		return catchWait;
	}
	final void runFinal(){
		writeln("run final");
	}
	string crawlerIt(){
		return "crawler";
	}

	this(uint catchTime){
		//this.catchTime = catchTime;
		this(catchTime,uint.init);
	}
	this(uint catchTime,uint catchWait){
		this.catchTime = catchTime;
		this.catchWait = catchWait;
	}
	CrawlerParser func(){
		//this = new CrawlerParser();
		return this;
	}

	this() {
		
	}
	~this(){
		writeln("free data");
	}
	static ~this(){
		writeln("static free data");
	}

}
/*
class XMLCrawlerParser : CrawlerParser{
	this(){

	}
	
	override void crawlerIt(){
		writeln("crawler it");
	}

}*/


unittest{
	//define d
	auto cp = new CrawlerParser();
	assert(CrawlerParser.getDefualtOpt() == "byCurl");
	cp.catchTime = 3;
	assert(cp.getCatchTime() == 3);

	//d object refence
	auto cp2 = cp;
	cp.catchTime = 4;
	assert(cp.getCatchTime() == 4);
	CrawlerParser cp3 = new CrawlerParser();
	assert(cp3 !is null);
	cp3.catchTime = 5;
	assert(cp.getCatchTime() == 4);

	//this() 分配内存,初始化,冠名,构造函数的调用
	CrawlerParser cp4 = new CrawlerParser(1);
	assert(cp4.getCatchTime() == 1);
	assert(cp4.getCatchWait() == 0);

	//~this()的步骤 对象冠名后是活的。所有引用消失,检查是否可以回收,
	//某个时间点回收,释放已解除分配的对象
	destroy(cp2);
	assert(cp2 !is null);
	assert(cp !is null);
	//static this
	assert(CrawlerParser.test_static == 11);
	//static this的调用顺序是先引入线调用,析构函数相反

	//XMLCrawlerParser xcp = new XMLCrawlerParser;
	//assert(CrawlerParser.crawlerIt()== "crawler");
	//xcp.crawlerIt();
}


© 著作权归作者所有

共有 人打赏支持
轻舞凋零
粉丝 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

没有更多内容

加载失败,请刷新页面

加载更多

.NET 知识整理笔记

1.Web.Config配置文件的节点操作 在Web.Config中写入 <configuration> <connectionStrings> <add name="conStr" connectionString="Data Source=IUCL8V4Y7NW5IRA\SQLEXPRESS;Initia......

Jokeny
9分钟前
0
0
Spring 声明式注解事务实现机制

Spring中注解事务实现机制 在使用@Transactional 注解管理事务时步骤很简单。但是如果对@Transactional理解不够透彻,很容易出现事务不起作用的情况。所以,在对@Transactional的实现机制要有...

狂奔的熊二
10分钟前
0
0
Fastjson - 详解SerializeFilter,格式化对象字段

遇到一个奇葩场景,维护一个老的程序, 应用换了个服务方. 要切接口. 但有以下问题. 接口逻辑稍有不同 , 需要自己按原接口文档,重组逻辑. 接口字段名,字段类型改动较大. 但还要按原接口文档返回...

ol_O_O_lo
10分钟前
0
0
一个小知识点---关于传递引用参数

如果传入引用参数 在方法内new 对象,其改变外层不可见

职业搬砖20年
15分钟前
0
0
Oracle数据导入导出命令及参数介绍(Linux)

1.数据导出 exp system/123456 file=d:\backup\oracle\oracle%date:~0,10%.dmp owner=system log=d:\backup\oracle\oracle%date:~0,10%.log 2.数据导入 imp system/manager@TEST file=d:\d......

lyle_luo
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部