`
betty_betty2008
  • 浏览: 24877 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
最近访客 更多访客>>
社区版块
存档分类
最新评论

D2 反射和defineEum! 练习

    博客分类:
  • D
F# 
阅读更多
备忘:

module DioApp;


import std.stdio;
import std.conv;
import std.string;
import std.metastrings;
import std.typecons;
import samsTools.utils;


mixin(defineEnum!("Shape","Triangle","Square","Ecllipse","Circle","Undefined"));

enum Color
{
	None,
	White,
	Black,
	Red,
	Undefined,
}
string[] colorInStr=["None","White","Black","Red","Undefined"];
class Animal
{
	public void sayHi()
	{
		writefln("Animal.sayHi()");
	}
	
}
class Cat:Animal 
{
	public void sayHi()
	{
		writefln("Cat.sayHi()");
	}
}
class Mouse:Animal
{
	public void sayHi()
	{
		writefln("Mouse.sayHi()");
	}
}
class Dog:Animal
{
	public:
	
	this()
	{
		Name="No Name";
		Age=0;
		color=Color.White;
	}
	
	string Name()
	{
		return name;
	}
	string Name(string name)
	{
		return this.name=name;
	}

	int Age()
	{
		return age;
	}
	int Age(int age)
	{
		return this.age=age;
	}
	Color color()
	{
		return m_color;
	}
	Color color(Color m_color)
	{
		return this.m_color=m_color;
	}

	void jump()
	{
		writefln(Name ~" is jumping");
	}
	void sayHi()
	{
		string result="Hello ! I'm %s\n"
				~"I'am %d years old\n"
				~"I'm wearing a %s color cloths.\n"
				~"Don't you like it?";
		writefln(result,Name,Age,colorInStr[color]);
	}
	/*static*/ void doit(){}
	/*
	string toString()
	{
		return "Name:"~name~"\n"
			  ~"Age:"~age~"\n"
			  ~"Color:"~m_color~"\n";
	}
	*/
	private:
	string name;
	Color m_color;
	int age;
	
}
void testObjFactory()
{
	string[] animal=["DioApp.Cat","DioApp.Mouse","DioApp.Dog"];
	//ClassInfo info= ClassInfo.find(animal[0]);
	//writefln(info.name);
	//writefln(info.base.name);
	

	for(int i=0;i<animal.length;++i)
	{
		string what=animal[i];
		auto obj=cast(Animal)Object.factory(what);
		if(__traits(hasMember,Animal,"sayHi"))
			obj.sayHi;
	}
}
void testEnum()
{
	Shape shape= Shape.Triangle;
	string triangle= enumToString(shape);
	writefln(triangle);

	string circle="Circle";
	Shape s_circle;
	enumFromString( circle,s_circle);
	writefln( "%s",s_circle);
	writefln(enumToString(s_circle));
}
int main(string[] args)
{
	/*
	auto input=askfor!(float);

	writefln("You entered %12.3f",input);

	write("Please enter a char:");
	char ch=readln[0];
	writefln("you entered %s",ch);

	write("Please enter you salary:");
	double salary=to!(double)(chomp(readln));
	writefln("You entered %f",salary);

	salary= askfor!(double)("Please enter your salary below.\nPlease enter ");
	writefln("You salary is %.2f",salary);

	*/
	/*
	auto Kitty=new Dog;
	Kitty.Name="Kitty";
	Kitty.Age=3;
	Kitty.color=Color.Black;

	//Kitty.sayHi;

	//Kitty.color=Color.Red;
	//Kitty.sayHi;

	//writeln(Kitty);

	auto obj=cast(Dog)Object.factory("DioApp.Dog");
	//Dog doggie=cast(Dog)obj;
	obj.sayHi;
	*/
	//obj=new Dog;
	/*
	writefln("First test:");
	if(__traits(hasMember,obj,"sayHi"))
		writefln("has member sayHi()");
	
	if(obj is null)
		writefln("Null class instance");
	Dog doggie=cast(Dog)obj;
	writefln("Second test");
	if(__traits(hasMember,doggie,"sayHi"))
		writefln("Has member sayHi()");

	writefln("Third test:");
	foreach(e;__traits(allMembers,Dog))//.contain("sayHi"))
	{
		if(e=="sayHi")
		writefln("sayHi() is a method of the class");
	}
		
	if(doggie !is null)
		//writefln("Null Dog instance.");
		doggie.sayHi;

	if(__traits(compiles,Dog.doit))
		writefln("doit is a static function of class Dog");
	*/
	//auto CDog=ClassInfo.find("Dog").create;
	//auto dog=cast(Dog)CDog;
	//if(dog is null)
	//	writefln("dog is null");
	//auto dog=cast(Dog)doggie;
	//dog.sayHi;
	
	//auto doggie=cast(Dog)CDog.create;
	//auto doggie= new CDog.name;
	//doggie.sayHi;

	
	//testEnum;
	testObjFactory;
	
	pause;
	return 0;
}
分享到:
评论

相关推荐

    d2l:d2l练习题和练习

    d2l:d2l练习题和练习

    D2NT_d2nt1.13c_ntbot_d2nt_d2ntbot_d2NT私服_

    【标题】"D2NT_d2nt1.13c_ntbot_d2nt_d2ntbot_d2NT私服" 指的是一个基于《暗黑破坏神2》(Diablo II)的游戏服务器软件,通常用于建立私人游戏服务器,即"D2NT私服"。这个版本是1.13c,这是《暗黑破坏神2》的一个经典...

    D2NT 1.13 patch_D2NTbot_d2nt_d2nt3.1_d2暗黑D2NTbot_diablo21.13kpbo

    D2NT 1.3版本是D2NTbot的一个重要更新,它带来了许多改进和修复,以确保更好的稳定性和兼容性。这些改进可能包括错误修复、性能优化以及新功能的添加,以满足不断变化的玩家需求。例如,可能增加了对新区域的支持,...

    d2l-zh-1.0.zip_D2L 文件_d2lzh安装_deeplearning_mxnet_pig17v

    D2L(Deep Learning in Action)是一本开源的深度学习教科书,旨在帮助初学者掌握深度学习的基本概念和实践技能。"d2l-zh-1.0.zip_D2L 文件_d2lzh安装_deeplearning_mxnet_pig17v" 是该教程的一个版本,它包含了一...

    D2RQ 下载 win和linux都有

    在“D2RQ 下载 win和linux都有”这个资源中,包含的是D2RQ的0.81版本,这是截止描述时的最新版本。D2RQ的这个版本提供对两种主流操作系统的支持,即Windows和Linux,这使得无论是在个人电脑还是服务器环境下,都能...

    d2bot-with-kolbot-cn-test_d2pt_kolbot_KPBOT_kolbot拾取文件_d2ptcom_源

    【标题】"d2bot-with-kolbot-cn-test_d2pt_kolbot_KPBOT_kolbot拾取文件_d2ptcom_源" 暗示我们正在处理一个与《暗黑破坏神2》(Diablo 2)相关的自动化工具,特别是针对战网(Battle.net)的游戏辅助程序。...

    TPA3116D2参考资料

    最后,TPA3116D2功放芯片的生产数据以及技术支持、样本购买、技术文档和社区支持都可以在德州仪器的官方网站上找到,这对于开发者和设计工程师来说是一个非常有用的资源。 总结来说,TPA3116D2作为一款数字放大器...

    d2rq-0.8.1.zip

    "d2rq-0.8.1.zip"是D2RQ的官方发行版,包含了所有必要的文件和文档,以便用户在自己的环境中部署和使用。 1. **D2RQ系统概述**: D2RQ系统主要由两部分组成:D2R Server和D2R Mapping Language。D2R Server是一个...

    计算多层媒质的反射和透射系数,多层介质膜的反射率,matlab源码.zip

    本文将深入探讨如何使用MATLAB来计算多层介质的反射和透射系数,以及如何求解多层介质膜的反射率。 首先,我们需要理解反射和透射的基本原理。当光波从一种介质进入另一种介质时,一部分光线会在界面处反射,另一...

    D2D显示图片(MFC)

    Direct2D,简称D2D,是微软推出的一种高...通过研究和理解这个示例,你将能够更好地掌握在MFC中使用D2D显示图片的技术和技巧。记住,实践是掌握新知识的关键,所以尝试自己动手实现这些功能,以加深理解和应用能力。

    Amlogic_S905D2规格书.pdf

    9. 开发工具:Amlogic S905D2提供了多种开发工具,包括Linux和Android操作系统、编译器、调试器和仿真器等。该处理器还支持多种开发环境,例如Ubuntu、Windows和Mac OS等。 10. 应用场景:Amlogic S905D2广泛应用于...

    l4d2插件.rar_-baijiahao_all4dead_l4D2超级跳插件_l4d2rpg插件_l4d2显示ip插件

    总的来说,"l4d2插件.rar"是一个集合了多样功能的插件包,旨在提升《求生之路2》的游戏乐趣和玩家互动。无论是超级跳带来的动作感,还是RPG元素带来的角色深度,或是显示IP的实用性,都极大地丰富了游戏内容,为玩家...

    D2D-communication-master_d2dcommunication_d2d_通信资源分配

    在"D2D-communication-master_d2dcommunication_d2d_通信资源分配"项目中,重点探讨了D2D通信中的资源分配策略以及干扰管理,以提高通信效率和网络性能。** 首先,**通信模型建立**是D2D通信的基础。在D2D通信模型...

    d2l-0.15.1-py3-none-any【d2l工具包-人工智能】

    总之,d2l工具包是深度学习初学者和专业人士的得力助手,它以PyTorch为基础,提供了丰富的学习资源和实用的代码示例。通过结合合适的教程和实际操作,用户可以在短时间内建立起对深度学习的深入理解,并能迅速地应用...

    system_distance_d2d通信仿真_chaira7v_D2D拓扑_d2d_D2D移动_

    在无线通信领域,D2D(Device-to-Device)通信是一种新兴的技术,允许设备之间直接进行数据传输,而无需经过...通过`system_distance.m`和`Power Control`等文件,我们可以深入理解D2D通信在不同场景下的行为和性能。

    D2Det-master_D2Det_

    压缩包中的"D2Det-master"可能包含了该算法的完整代码库,包括模型定义、训练脚本、数据预处理和后处理等,这对于深入理解D2Det的工作原理和实际应用非常有价值。研究者和开发者可以通过阅读源代码、调整参数和训练...

    d2rq-0.8.1,tar.zip 下载

    在D2RQ-0.8.1这个版本中,我们看到对早期版本的改进和优化,旨在提供更加稳定和高效的性能。 1. **D2RQ核心特性:** - **映射语言**:D2RQ提供了一种强大的映射语言,可以将数据库表、字段与RDF资源、属性和类进行...

    network assisted device discovery for D2D

    在这篇文章中,作者探讨了在LTE-Advanced网络控制范围下,设备到设备(D2D)用户设备发现的关键功能,重点包括资源复用和干扰协调。D2D通信是一种允许设备在彼此之间直接通信的技术,这种技术在智能手机等移动设备上...

    D2D通信技术讲解PPT课件

    - **分布式控制**:D2D设备自主建立和维持链路,减少了基站的管理负担,但设备需处理更多复杂任务。 5. **D2D通信优势** 相比蓝牙、WLAN等,D2D通信使用授权频段,确保了更高的数据传输可靠性,且能自动连接,...

    TPA3140D2 EVM 中文用户手册

    该手册旨在为用户提供关于 TPA3140D2 EVM 的详细操作指南和设计文档。 #### 操作指南 ##### 静电放电警告 由于 TPA3140D2 EVM 上的许多组件对静电放电(Electrostatic Discharge, ESD)非常敏感,因此在处理和...

Global site tag (gtag.js) - Google Analytics