110,568
社区成员
发帖
与我相关
我的任务
分享
List<演员> list;
表演班 team;
....
list.AddRange(team); //把team中的所有成员加入演员表
这个代码很可能编译不过去。可是你不需要修改这个代码,只要为表演班类型增加一个自定义的转换为List<演员>的方法,上述代码就编译过去了。可见你的代码表现力就丰富了,代码成文自明。var clause = (主语)s1 + (谓语)s2 + (宾语)s3;
这个代码表示三个字符串被转换为三类不同的语言元素,然后被两个自定义重载的+运算符操作,从而产生了“句子”这个新对象。这样的代码是不是成文自明?这就需要自定义类型转换和自定义运算符重载技术,才能写出能被用户一目了然的代码(而不是那种只有程序员才习惯看的代码)。class 马
{
public int 齿龄;
}
class 香蕉
{
public int 成熟度;
public static implicit operator 马(香蕉 x)
{
return new 马 { 齿龄 = x.成熟度 / 5 };
}
}
在这个例子里,我无厘头地定一个把香蕉对象可以强制类型转换为马对象的例子。使用它的代码就是var a = new 香蕉 { 成熟度 = 90 };
var b = (马)a;
运行它你就会发现变量b引用了一个齿龄为18的马对象。但是如果你打印a和b的GetHashCode(),它们总是不相同的。var ren=(中国人)p1;