发表评论
#2楼 [
楼主]2008-07-25 14:46 |
@暗香浮动
我是理解为 是云计算的发现就像地球人发现恐龙化石了
#4楼 [
楼主]2008-07-25 14:59 |
关键是那2张漫画太强了,第一张漫画完电脑完的睡觉都在想。。
第二张漫画可能是说 云计算倒塌造成了恐龙的灭绝 因为可能以后我们的计算的发展 虚拟技术 都和云计算挂钩 比如我们的电脑 可能没有本地的软件了 都是微软的服务器提供的虚拟软件 等哪天微软 google倒塌了 我们就灭绝了 呵呵
#6楼 [
楼主]2008-07-25 15:24 |
@guojing
老兄,,你那个学校毕业的??
* SkyDrive
*
* 在您的区域中尚不可用
Hot new updates to SkyDrive!
# More places. We're now live in 24 additional locations, bringing our grand total to 62 countries and regions! We welcome new users in Bulgaria, Costa Rica, Croatia, Czech Republic, Estonia, Germany, Greece, Hungary, Indonesia, Ireland, Latvia, Lithuania, Malaysia, Philippines, Poland, Romania, Russia, Serbia, Singapore, Slovakia, Slovenia, Thailand, Ukraine, and Venezuela!
china is not included
#10楼 [
楼主]2008-07-25 15:44 |
@Tony Zhou
我估计有可行方法。。我跟一样,当初服了。。
你先到网上查查,会有个英文的链接地址过去注册帐号,但我当时就算是英文的页面也还是说在您的区域中尚不可用,后来我把系统的区域设置改成英文了,然后在英文主页上登录,即可。。然后我又在区域设置里面改成中国,就算从汉语主页上登录,也可以了,,哈哈。。
#11楼 [
楼主]2008-07-25 15:45 |
@鬼不灵
谢谢。
#12楼 [
楼主]2008-07-25 15:45 |
@包建强
包大哥,,包大哥。。。。。我提供线索,你来破吧。。
#14楼 [
楼主]2008-07-25 15:52 |
@装配脑袋
。。
#15楼 [
楼主]2008-07-25 15:54 |
@包建强
要不我在摘要那里帮你写个通知吧。。
C#的4个新特性那篇,不想详细翻译了,大致说下
1.代理实现至接口
比如说
public class Foo : IList<string>
{
private List<string> _Collection implements IList<string>;
public Foo()
{
_Collection = new List<string>();
}
}
这样的代码,就等于是把_Collection实现IList<string>的方法全代理出来,当调用Foo的Ilist<string>的方法时会自动调用_Collection的,作用就是少写代码
2.匿名返回类型
就像是public var GetProductInfos()这样,当然最终还是强类型的,编译器检查并定位
3.Duck-typing or Structural Subtyping的支持
这个不是太懂,大致的意思是,一个类就算没有实现某接口,但他有某接口规定的方法或属性,则默认当他实现了此接口,比如
public interface IReadOnlyRestricable
{
bool ReadOnly { get; set; }
}
这么个接口,有以下代码
foreach (Control c in f.Controls)
{
//would like to have implicit cast to IReadOnlyRestrictable if interface contract is in class we are checking against
IReadOnlyRestricable editable = c as IReadOnlyRestricable;
if (editable != null)
editable.ReadOnly = true;
}
他的希望是,就算foreach里的c不是IReadOnlyRestricable接口的实现,但他有一个叫ReadOnly的属性,那么就当他是IReadOnlyRestricable接口的实现,也会参与到if段的执行
4.安全的null判断操作符
这个简单,看以下
int? orderNumber = Customer?.Order?.OrderNumber;
这句的意思是,如果Customer为null则返回null,否则看Customer.Order,如果为null就返回null,不然返回Customer.Order.OrderNumber
这个应该容易实现,因为这个是三元运算符的简化,相当于
int? orderNumber = Customer == null ? null : (Customer.Order == null ? null : Customer.Order.OrderNumber)
@装配脑袋
我觉得除了第3条外,都是编译层面的实现,应该不是问题,第3条假了点,改变了我们日常的习惯,不太好
果然,是那个人YY的新特性。。不过有一些看上去有道理
--引用--------------------------------------------------
真见: @Tony Zhou
我估计有可行方法。。我跟一样,当初服了。。
你先到网上查查,会有个英文的链接地址过去注册帐号,但我当时就算是英文的页面也还是说在您的区域中尚不可用,后来我把系统的区域设置改成英文了,然后在英文主页上登录,即可。。然后我又在区域设置里面改成中国,就算从汉语主页上登录,也可以了,,哈哈。。
--------------------------------------------------------
我按照你的方式做了,把系统区域改成中国,也不行
#21楼 [
楼主]2008-07-25 16:14 |
@Gray Zhang
非常感谢。。
#22楼 [
楼主]2008-07-25 16:16 |
#23楼 [
楼主]2008-07-25 16:16 |
@小生
谢谢夸奖。
#24楼 [
楼主]2008-07-25 16:21 |
@Gray Zhang
你真的很热情啊。。
1. 通过委托成员来实现接口
我很想看到在C# 4.0中可以通过委托某个成员的实现来实现一个接口,例如下面的代码:
//faux code
public class Foo : IList<string>
{
private List<string> _Collection implements IList<string>;
public Foo()
{
_Collection = new List<string>();
}
}
被封闭的成员可以用以委托实现一个或多个接口,多个接口用逗号分隔。这么做可以少掉很多冗余的代码,就像上面的示例,不再需要在封闭类(Foo类)上写一大堆方法来将接口实现交给成员变量,接口的实现会直接映射到受委托的接口实现(_Collection成员变量)。这个功能同样增强了对minxins的支持。
这个就是“委托模式”了,wikipedia上对此模式的解释如下:
委托模式是指一个对象对外表现某种行为,但事实上只是将实现此行为的任务将会给一个相关的成员的技术,这种技术反转了责任。委托模式是加强组合 (聚合)、minxins及aspects的一种基本模式。
再进一步,在委托实现接口之余,我们也应当可以自由地重写某些方法如下:
public class Foo : IList<string>
{
private List<string> _Collection { get; set; } implements IList<string>;
public Foo()
{
_Collection = new List<string>();
}
//This would override the delegated implementation
// for nice mixin functionality and easy decorator pattern implementation
public int IList.Add(string value)
{
if (!_Collection.Contains(value))
_Collection.Add(value);
}
}
2. 匿名返回类型
我希望见到在C#中匿名类型可以拥有像普通的类声明一样的地位。(当前)匿名类型只能用于局部变量,不能作为方法的返回值。但是如果一个强类型的LINQ查询的返回类型可以作为方法的返回类型一定很好,比如下面的代码:
//faux code
public var GetProductInfos()
{
var productInfos =
from p in products
select new { p.ProductName, p.Category, Price = p.UnitPrice };
return productInfos;
}
3. Some Duck-typing or Structural Subtyping support
如果一个类中的某一个方法/属性的签名和某个接口一样,并且这个类没有实现此接口,那么这个类就将隐式地实现这个接口。只有这个类实现了接口规定的所有方法/属性的时候才被认为隐式地实现了此接口。
如果这东西走起来像鸭子,晃起来像鸭子,那么这就是鸭子!(James Riley)
那么这个和Structural Subtyping有什么区别?我承认structural subtyping更适合C#的静态样式,所以这是个'static duck typing',或者如wikipedia所述:
Duck typing与structural typing的区别仅在于类型中被访问的部分在运行期才做兼容性确认。
我们将通过一个用例来说明这种方法有什么好处:
在.NET框架中,一部分控件实现了一个叫ReadOnly的属性,比如TextBox, DataGrid, NumericUpDown
现在我们建一个叫IReadOnlyRestricable的接口
public interface IReadOnlyRestricable
{
bool ReadOnly { get; set; }
}
然后我们要遍历所有的控件,找出有ReadOnly属性的控件并把此属性设为true(译者注:这些控件本身没有实现IReadOnlyRestricable),在ducktyping下我们可以把控件通过类型转换为IReadOnlyRestricable,就像下面代码一样,这样我们就不需要通过反射去定位ReadOnly属性了:
foreach (Control c in f.Controls)
{
//would like to have implicit cast to IReadOnlyRestrictable if interface contract is in class we are checking against
IReadOnlyRestricable editable = c as IReadOnlyRestricable;
if (editable != null)
editable.ReadOnly = true;
}
在我看来ducktyping的最大好处是可以为你不需要访问的类库定义一些接口,这可以尽可能地减少相互依赖,你可以查看Phil Haacks more extensive post on duck typing这文章来看看为什么作者相信这对C#有好处。
Krzysztof Cwalina认为,很显然的,C#的foreach关键字已经使用了duck typing.
4. 安全的null延迟赋值操作符
我很想看到一种安全地访问一个值为null的对象的属性的表达式,表达式可能形如Object.Property.Property.Value
比如我要访问Customer?.FirstName,但是Customer是null,此时Customer?.FirstName会返回null而不是抛出个NullReferenceException
再看看下面的代码,你就会知道怎么用了:
//FAUX CODE
//this would throw a null reference exception as usual if either Customer or Order was null
int orderNumber = Customer.Order.OrderNumber;
//this would not compile since it would require a nullable return type
int orderNumber = Customer.Order?.OrderNumber;
//this would return null if a Customer was null or if Order was null
int? orderNumber = Customer?.Order?.OrderNumber;
if (orderNumber.HasValue)
//... do something with it
//instead of having to do
if ((Customer != null) && (Customer.Order != null))
int a = Customer.Order.OrderNumber
你再对上一遍,把里面一些超链接之类的加一下放上去吧
@支持继续使用XP
第一个特性本来就和代理没什么关系,人家说的是委托
@Anders Liu
第四条就是安全的null操作符,Customer?.Order?.OrderNumber这个
@真见
也没啥,人不高兴让我用我就不用了,我不大会去费力非得注册进去。
#30楼 [
楼主]2008-07-25 16:42 |
@Gray Zhang
好的,链接已经加上。
#31楼 [
楼主]2008-07-25 16:44 |
@Tony Zhou
不过说实话,微软的这个Windows Live SkyDrive 真是好东西,但是很多人不知道根本就有它存在。。你以后在试试吧。
#33楼 [
楼主]2008-07-25 17:22 |
@银河
呵呵,多谢支持。
是的,必须注明这四个特性是那人想象的,不是真正的C# 4特性。此外有些翻译的不对,比如安全的null传播,可能许多人已经忘了什么叫null传播……
--引用--------------------------------------------------
真见: @guojing
老兄,,你那个学校毕业的??
--------------------------------------------------------
我武昌分校的 你认识?
#38楼 [
楼主]2008-07-25 18:57 |
@bangbang
@装配脑袋
真的吗?别吓我啊。。我真要是迷糊了大家,那不成了罪人。
#39楼 [
楼主]2008-07-25 18:58 |
@guojing
不认识,看到你说的那么好,以为是高等学府毕业的。
#40楼 [
楼主]2008-07-25 19:02 |
以标注IS 注明特性不是真正的C#4.0特性,感谢bangbang 与 装配脑袋的提醒。
--引用--------------------------------------------------
真见: @guojing
不认识,看到你说的那么好,以为是高等学府毕业的。
--------------------------------------------------------
我比较反感什么高等学府出生的之类的,就好像大染坊那个电视剧里的六哥是个讨饭的一样,我就是一个分校的,我就是垃圾,不过我有自己的奋斗方式 : )
我是高中接触计算机的,可惜,接触计算机早,学习拉下了,呵呵
#42楼 [
楼主]2008-07-25 19:31 |
@guojing
呵呵,我也是武汉培训学校学了一年,去年7月份毕业的,银河学院,你肯定知道。。后悔呀,,,,
--引用--------------------------------------------------
真见: @guojing
呵呵,我也是武汉培训学校学了一年,去年7月份毕业的,银河学院,你肯定知道。。后悔呀,,,,
--------------------------------------------------------
呵呵,不过我还好,我刚大3,你可以去我的博客或者
http://www.shangducms.com,自己做的小项目
2.Webgrid控件开源了。
--------------------
绝对好消息!
#46楼 [
楼主]2008-07-25 22:22 |
@xjb
那就尽情关注下个回合吧。。
#47楼 [
楼主]2008-07-25 22:24 |
@guojing
嗯,你这个项目做得还不错呀,能搞出美工就不错了,有前途。。支持你,good luck。
#48楼 [
楼主]2008-07-25 22:25 |
@蜡人张
嗯,谢谢。
--引用--------------------------------------------------
真见: @guojing
嗯,你这个项目做得还不错呀,能搞出美工就不错了,有前途。。支持你,good luck。
--------------------------------------------------------
同在,good luck,在武汉有2000多不容易的 不管怎样 加油吧
#50楼 [
楼主]2008-07-26 09:55 |
@guojing
牛人。。good luck
#54楼 [
楼主]2008-07-26 14:33 |
@狼Robot
@狼Robot
@fox23
呵呵,不客气。
鸭子接口显然会对现有的程序造成很大的问题。
比如说INamingContainer这种标记接口。
会变成所有的类都实现这接口了。
其他的,第一个不妨用隐式类型转换,只不过隐式类型转换不能被继承。但是这种语法带来的混乱估计也不小才对。尽管我们的确懒的去自己实现IList啥的。
最后一个特性这种奇怪的?也许会给程序员带来很多不良的习惯。