webabcd - 专注于asp.net

ASP.NET
从现在开始 一切都不晚
posts - 149, comments - 4168, trackbacks - 344, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理
[索引页]
[源码下载]


步步为营VS 2008 + .NET 3.5(3) - C# 3.0新特性之Automatic Properties(自动属性)、Object Initializers(对象初始化器)、Collection Initializers(集合初始化器)和Extension Methods(扩展方法)


作者:webabcd


介绍
    ·Automatic Properties(自动属性)
    ·Object Initializers(对象初始化器)
    ·Collection Initializers(集合初始化器)
    ·Extension Methods(扩展方法)


示例
AutomaticProperties.cs(自动属性)
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;

/// <summary>
/// AutomaticProperties(自动属性)的摘要说明
/// </summary>

public class AutomaticProperties
{
    
public int ID getset; }

    
// 上面的ID属性(自动属性)等同于下面的ID属性

    
// private int _id;
    
// public int ID
    
// {
    
//     get { return _id; }
    
//     set { _id = value; }
    
// }
}


ObjectInitializers.cs对象初始化器
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;

/// <summary>
/// ObjectInitializers(对象初始化器)的摘要说明
/// </summary>

public class ObjectInitializers
{
    
public int ID getset; }
    
public string Name getset; }

    
public void ObjectInitializersTest()
    
{
        ObjectInitializers oi 
= new ObjectInitializers { ID = 1, Name = "webabcd" };

        
// 上面的oi对象(对象初始化器)等同于下面的oi对象

        
// ObjectInitializers oi = new ObjectInitializers();
        
// oi.ID = 1;
        
// oi.Name = "webabcd";
    }

}


CollectionInitializers.cs集合初始化器
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;

using System.Collections.Generic;

/// <summary>
/// CollectionInitializers(集合初始化器)的摘要说明
/// </summary>

public class CollectionInitializers
{
    
public int ID getset; }
    
public string Name getset; }

    
public void CollectionInitializersTest()
    
{
        List
<CollectionInitializers> list = new List<CollectionInitializers>
        
{
            
new CollectionInitializers { ID = 1, Name = "webabcd" },
            
new CollectionInitializers { ID = 2, Name = "webabcdefg" },
            
new CollectionInitializers { ID = 3, Name = "webabcdefghijklmn" }
        }
;

        
// 上面的list集合(集合初始化器)等同于下面的list集合

        
// List<CollectionInitializers> list = new List<CollectionInitializers>();
        
// list.Add(new CollectionInitializers { ID = 1, Name = "webabcd" });
        
// list.Add(new CollectionInitializers { ID = 2, Name = "webabcdefg" });
        
// list.Add(new CollectionInitializers { ID = 3, Name = "webabcdefghijklmn" });
    }

}


ExtensionMethods.cs扩展方法
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;

/// <summary>
/// ExtensionMethods 的摘要说明
/// </summary>

public class ExtensionMethods
{
    
public void ExtensionMethodsTest()
    
{
        
string s = "123";
        
// 使用string的ToInt32()扩展方法
        int i = s.ToInt32();
        
// i == 123

        
string[] ary = new string[] "a""b""c" };
        
// 使用object的In()扩展方法
        bool b = "b".In(ary);
        
// b == true
    }

}


/// <summary>
/// 扩展方法(类和方法均为static)
/// 使用的时候要引用该类的命名空间
/// </summary>

public static class MyExtensionMethods
{
    
// this代表扩展方法应用于string类型上
    
// ToInt32()是将string类型转换为int类型的扩展方法
    public static int ToInt32(this string s)
    
{
        
int i;
        Int32.TryParse(s, 
out i);

        
return i;
    }


    
// this代表扩展方法应用于object类型上
    
// 该扩展方法需要一个类型为System.Collections.IEnumerable的参数
    
// In()是判断一个object是否存在于一个System.Collections.IEnumerable中的扩展方法
    public static bool In(this object o, System.Collections.IEnumerable e)
    
{
        
foreach (object i in e)
        
{
            
if (i.Equals(o))
            
{
                
return true;
            }

        }


        
return false;
    }

}




OK
[源码下载] 

Feedback

#1楼    回复  引用  查看    

2007-10-11 09:36 by aspnetx      
不错,简洁明了

#2楼 [楼主]   回复  引用  查看    

2007-10-11 11:09 by webabcd      
@aspnetx
:)
因为我比较懒

#3楼    回复  引用    

2007-10-11 13:14 by ivw [未注册用户]
支持。。。
兄弟,BLOG里的防重复提交是怎样做的啊?如果用这种方法我感觉不太好用啊。
OnClientClick="this.disabled=true;this.form.submit();" UseSubmitBehavior="False"

#4楼 [楼主]   回复  引用  查看    

2007-10-11 17:46 by webabcd      
@ivw
:)
我也是那么写的,挺好用啊

#5楼    回复  引用    

2007-10-11 19:59 by ivw [未注册用户]
这种方法如果我要先执行一段JS 返回真后再执行提交那就好像不行了啊.

OnClientClick="return test();this.disabled=true;this.form.submit();" UseSubmitBehavior="False"

function test()
{
if(1==1)
{ return true;}
else{return false;}
}

#6楼 [楼主]   回复  引用  查看    

2007-10-11 20:31 by webabcd      
@ivw
可以这样

OnClientClick="test(this)"

function test(obj)
{
if(1==1)
{ obj.disabled=true; obj.form.submit();}
else{ }
}

#7楼    回复  引用    

2007-10-11 20:37 by ivw [未注册用户]
哦,我刚才也是这样试,但不成功.原来我在前面加了个return是不行的.

#8楼    回复  引用    

2007-10-11 20:42 by ivw [未注册用户]
不过如果用在UpdatePanel控件里就起不了作用,不会执行后台代码.页面还刷新一次

#9楼    回复  引用    

2007-10-11 22:41 by 黑白 [未注册用户]
兄弟最近发文很快啊
收藏一下,以后慢慢看

#10楼 [楼主]   回复  引用  查看    

2007-10-12 08:08 by webabcd      
@ivw
用在UpdatePanel肯定不行,它是走xmlhttp的,而不是直接提交form

@黑白
:)
最近不太忙了,趁有时间多发些

#11楼    回复  引用    

2007-10-12 12:56 by ivw [未注册用户]
如果在UpdatePanel里实现防重复提交有其它办法吗?

#12楼 [楼主]   回复  引用  查看    

2007-10-12 18:49 by webabcd      
@ivw
那你需要熟悉一下ASP.NET AJAX的客户端脚本编程
把这篇文章搞懂了,就能解决你的问题
http://www.cnblogs.com/webabcd/archive/2007/06/19/788430.html

#13楼    回复  引用    

2007-10-13 09:57 by ivw [未注册用户]
怎么我在按钮里设置了UseSubmitBehavior="False" 但它还是会执行后台的代码啊?
<asp:Button ID="Button1" runat="server" OnClientClick="Check(this,'tb1')" UseSubmitBehavior="False" CssClass="button4" Text="确定" OnClick="Button1_Click" />


function Check(src,name)
{
var obj=document.getElementById(name)
if(obj.value!="")
{
src.value="请稍等...";
src.disabled=true;
src.form.submit();
}
else
{
alert("不能为空!");
obj.focus();
}
}

#14楼 [楼主]   回复  引用  查看    

2007-10-15 08:01 by webabcd      
@ivw
UseSubmitBehavior="False"
的意思是相关的<input />的type不是submit

要是form.submit();
当然还是会提交的

#15楼    回复  引用    

2007-10-15 08:48 by ivw [未注册用户]
这个知道,但你看到else后面的语句没有submit()啊?但他依然执行后台操作。当他执行行else后面的语句后就又执行后台代码,如果在改成 return Check(this,'tb1')  else后是不执行后台代码,但为真的时候也不会提交。

#16楼    回复  引用    

2007-10-15 08:49 by ivw [未注册用户]
像BLOGS这里的提交是怎样做出来的啊?这里应该用了Ajax吧?

#17楼 [楼主]   回复  引用  查看    

2007-10-15 10:28 by webabcd      
@ivw
因为你设置了OnClick="Button1_Click"
所以会执行
UseSubmitBehavior的作用就是一个是submit一个是button



对啊
但不能只用UpdatePanel

把这几个事件好好看一遍就知道了
InitializeRequest
BeginRequest
EndRequest

#18楼    回复  引用    

2008-01-03 13:53 by foolfool [未注册用户]
精彩

#19楼 [楼主]   回复  引用  查看    

2008-01-03 20:02 by webabcd      
@foolfool
:)
过奖

#20楼    回复  引用  查看    

2008-09-11 09:44 by Steven Chen      
回帖很有意思

#21楼 [楼主]   回复  引用  查看    

2008-09-11 14:12 by webabcd      
@Steven Chen
???
什么意思

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-02-13 18:21 编辑过


相关链接: