不断学习,持续更新
面向對象程序設計 public:同一程序集中的任何其他代碼或引用該程序集的其他程序集都可以訪問該類型的成員。 protected:只有同一類或結構或者此類的派生類中的代碼可以訪問的類型成員。 private:只有同一類或結構中的代碼可以訪問該類型或成員。 interval:同一程序集中的任何代碼都可以訪問該類型的成員,但其他程序集中的代碼不可以訪問。 params:表示參數是可變個數的。在方法聲明中的params關鍵字之后不允許任何參數,并且在方法聲明中只允許一個params關鍵字。 (1)若形參表中含一個參數數組,則該參數數組必須位于形參列表的最后。 (2)參數數組必須是一維數組。 (3)不允許params與ref和out組合使用。 (4)與參數數組對應的實參可以是同一類型的數組名,也可以是任意多個屬于同一類型變量的該數組的元素。 (5)若實參是數組按引用傳遞,若實參是變量或表達式按值傳遞。 static: (1)類的靜態成員屬于類所有,非靜態成員屬于類的實例所有。 (2)每創建一個類的實例,都會在內存中為其分配一塊存儲區。 (3)靜態成員存儲在全局數據區。 (4)static成員方法或成員變量在類未實例化前即可使用。 (5)非靜態方法可訪問類中任何成員,靜態方法只能訪問靜態成員。
MVC 1、目錄結構 App_Data:數據庫文件 Content:靜態文件(樣式文件、圖片等) Models:模型組件 View:視圖組件 Controllers:控制器組件 Shared:視圖組件中的公用部分。該目錄不屬于單個控制器,而是屬于所有控制器。存放母版頁等。 每個控制器,在View文件夾中都有一個與控制器名稱相對應的目錄。例如有HomeController則Views文件夾中就要創建一個Home的目錄,這樣HomeController加載相關視圖時,就自動尋找Views/Home目錄下的頁面。 2、控制器給視圖傳遞數據 (1)ViewData:只能在一個動作方法中設置,在相關的視圖頁面中讀取,只對當前的視圖頁面有效。 (2)TempData:可在多個動作方法中或多個頁面中設置,讀取。 (3)Model (4)傳遞多個數據對象:定義一個類,將多個數據對象放到這個類中。 3、視圖給控制器傳遞數據 (1)Request.Form (2)FormCollection (3)Request 4、過濾器Filters:被用于整個應用程序而不適合放置于某個局部位置。 Filters功能: (1)判斷登錄與否或用戶權限 (2)決策輸出緩存 (3)防盜鏈 (4)防蜘蛛 (5)本地化與國際化設置 (6)實現動態action Filter要繼承于ActionFilterAttribute抽象類 定義: public class TestFilter:ActionFilterAttribute { ? public override void OnActionExecuting(ActionExectingContext filterContext) ? { ? ? filterContext.HttpContext.Session["temp"]="1"; ? } } 使用: [TestFilter] public ActionResult FilterAction() { ? //代碼 }
5、多個按鈕提交表單實現 (1)<input type="submit" value="審核" οnclick="this.form.action=\"<%=Url.Action(\"Action1\")%>\";"/> 點擊按鈕改變form的action屬性 (2)在Action中判斷通過哪個按鈕提交 <input type="submit" value="審核" name="action"/> public ActionResult Index(string action) { ? if(action=="審核") ? { ? ? } ? else ? { ? } } (3)使用ActionSelector public class MultiButtonAttribute:ActionNameSElectorAttribute { ? public string Name{get;set;} ? public MultiButtonAttribute(string name) ? { ? ? this.Name=name; ? } ? public override bool IsValidName(ControllerContext c,string actionName,System.Reflection.MethodInfo methodInfo) ? { ? ? if(string.IsNullOrEmpty(this.Name)) ? ? { ? ? ? return false; ? ? } ? ? else ? ? { ? ? ? return c.HttpContext.Request.Form.AllKeys.Contains(Name); ? ? } ? } } [MultiButton("action1")] public ActionResult Action1() { ? return View(); } [MultiButton("action2")] public ActionResult Action2() { ? return View(); } 6、RenderBody、RenderPage、RenderSection (1)RenderBody:在模板頁中,@RenderBody()所占位置就是要填充的內容的位置。 (2)RenderPage:調用局部頁面的加入。? (3)RenderSection:在母版頁中占個位,讓使用此母版的子頁自己去呈現它們的Section。
HTML和CSS 1、高性能HTML代碼 (1)CSS文件在前,JS文件在后,JavaScript代碼放到頁面底部。script標簽兩個屬性async和defer。defer設為true則此文件滯后執行,不影響頁面HTML渲染,async設為true則文件異步加載和執行。 2、CSS標準 (1)盡可能不用標簽類型選擇器;少用ID選擇器。 (2)屬性值為0后面單位可省略。url值兩端引號可以省略。
Linq from ? ?指定查詢操作的數據源和范圍變量 select ?指定查詢結果的類型和表現形式 group ? 對查詢結果進行分組 where ?篩選元素的邏輯條件,一般由邏輯運算符組成 orderby對查詢結果進行排序 join ? ? 連接多個查詢操作的數據源 let ? ? ? 引入一個用于存儲查詢表達式中的子表達式結果的范圍 into ? ? ?提供一個臨時的標識符。該標識可以引用join、group和select子句的結果
LINQ to Objects可以查詢、檢索、排序、聚合、分區、關聯IEnumerable或IEnumerable<T>集合,也就是說可以操作任何可枚舉的集合。?
例1:定義一個字符串數組,查找數組中長度小于7的所有項。 string[] strName=new string[]; IEnumerable <string> selectQuery= ? from Name in strName ? where Name.Length<7 ? select Name; 例2: from info in tb_Employee select new { ? 員工編號=info.ID, ? 員工姓名=info.Name, ? 性別=info.Sex }; 例3: from info in tb_Employee where info.ID="223" select new { ? 員工編號=info.ID, ? 員工姓名=info.Name, ? 性別=info.Sex };例4:?
int[] values={1,2,3,4,5,6,7,8,9,0};?
var value=from v in values ?
? ? ? ? ? ? ? ? ? ? ? ?where v%2==0?
? ? ? ? ? ? ? ? ? ? ? ?select v;?
foreach(var v in value)?
{?
? ? Response.Write(v.ToString()+",");
}?
例5:?
ArrayList dynamicArr=new ArrayList();?
dynamicArr.Add("ooo");?
dynamicArr.Add("pppp");?
dynamicArr.Add("qqqqq");?
var query=from item in dynamicArr.ToArray()?
? ? ? ? ? ? ? ? ? ? ? ?where item.ToString().Length>3?
? ? ? ? ? ? ? ? ? ? ? ?select item;?
foreach(var item in query)?
{?
? ? Response.Write(item+",");?
}?
例6:?
Dictionary<int,UserInfo> users=new Dictionary<int,UserInfo>();?
users.Add(3,new UserInfo(1,"User01","01"));?
users.Add(2,new UserInfo(2,"User02","02"));?
users.Add(1,new UserInfo(3,"User03","03"));?
var query=from item in users?
? ? ? ? ? ? ? ? ? ? ? ?orderby item.Key?
? ? ? ? ? ? ? ? ? ? ? ?select item;?
foreach(var item in query)?
{?
? ? Response.Write(string.Format("({0},{1})", item.Key,item.Value.UserName));
? ? Response.Write("<br/>");?
}?
C#編碼規范 1、數據類型簡寫規則 整型 ? ? ?int ? ? ? ? ? ? ? 長整形 ? ? ? ? lint 字符串 ? ?str ? ? ? ? ? ? ? 單精度浮點型 ? flt 布爾型 ? ?bl ? ? ? ? ? ? ? ?雙精度浮點型 ? dbl 短整形 ? ?sint ? ? ? ? ? ? ?字節型 ? ? ? ? bt 2、變量及對象名稱命名規則 模塊級變量 ? ? ? ? M_數據類型簡寫_變量名 全局變量 ? ? ? ? ? G_變量名 局部變量 ? ? ? ? ? P_變量名 模塊級常量 ? ? ? ? Mc_常量名 全局常量 ? ? ? ? ? Gc_常量名 過程級常量 ? ? ? ? Pc_常量名
C++ 1、C中的存儲區 棧:編譯器自動分配釋放(函數體中定義的變量)。 存儲在棧中的對象,如:Human Jack;會在超出作用域時自動釋放。 堆:程序員分配釋放,程序結束可能由OS回收。使用new、malloc、calloc、realloc獲取的存儲區。 存儲在堆中的對象,如Human *Jack=new Human;不會自動釋放。 靜態區、全局區:程序結束釋放。加static修飾。如:靜態局部變量屬于靜態存儲方式,靜態局部變量始終存在著,生存期是整個源程序,但是作用域只在函數內部,退出函數變量仍存在,但不能使用;允許對構造類靜態局部變量賦初值,若未賦初值,則由系統自動賦值。 常量:程序結束釋放。 2、內存泄露 (1)假如沒有刪除一個指針就對其重新賦值。 int *p=new int; p=new int; 應該寫成: int *p=new int; delete p; p=new int; 3、指針和引用 (1)常量指針:int *const p;這個指針它自身的值是不可改變的,但它指向的目標是可以改變的。 (2)指向常量的指針:const int *p;指針可改變,指向的目標不可改變。 (3)指向常量的常指針:const int *const p;本身和指向的目標都不可改變。 (4)指針可以為空,引用不能為空。指針可以被賦值,引用只能初始化,不可以被賦為另一個對象的別名。堆中創建區域,必須用指針指向它,也可用引用來引用指向內存空間的指針。 4、成員變量初始化 class Rectangle { public: ? Rectangle():length(3),width(5) ? { ?? ? } } 5、運算符重載 class num { public: ? void operator++() ? { ? ? n++; ? } private: ? int n; } 6、向基類構造函數傳遞參數 class Father { public: ? Father() ? { ? } ? Father(string a,int i) ? { ? ? name=a; ? ? tall=i; ? } ? ? ~Father() ? { ? ? } protected: ? ? string name; ? ? int tall; }; class Son:public Father { public: ? Son(string a,int i,int j):Father(a,i) ? { ? ? weight=j; ? } protected: ? ? int weight; } 7、多重繼承產生兩義性 一個派生類從多個基類派生,而這些基類又有一個共同的基類,那么派生類訪問共同的基類中的成員時會產生兩義性。 class A { public: ? ? void hello() ? ? { ? ? ? ?? ? ? } }; class B { public: ? ? void hello() ? ? { ? ?? ? ? } }; class C:public A,public B { ? ? C c; ? ? c.A::hello(); ? ? c.B::hello(); } 8、虛函數 virtual class Father { public: ? ? virtual void run() const ? ? { ? ?? ? ? } }; class Son:public Father { public: ? ? ? ? void run() const ? ? ? ? { ? ? ? ?? ? ? ? ? } }; int main() { ? ? Father *p=new Son; ? ? p->run(); ? ? delete p; ? ? return 0; } run()前加virtual表示該函數有多種形態的,即該函數可能被多個對象所擁有,而且功能不一,系統對于virtual的函數會自動判斷是哪個對象調用了它,然后調用相應的函數。 9、純虛函數:一個虛函數初始化為0就變成了純虛函數。純虛函數無任何功能,不能直接調用,它是抽象的,只有被子類繼承了并賦予新功能才能使用。 virtual void run()=0; 包含純虛函數的類叫抽象類。 不可以定義抽象類的對象,但可以定義一個指向抽象類的指針,該指針可以在編譯時動態指向子類的對象,從而實現程序多態性。 10、C++與資源相關的對象,析構的時候都會把和它相關聯的銷毀。
MFC 1、MFC消息分類 (1)標準消息:除WM_COMMAND之外,所有以WM_開頭的消息;從CWnd類派生的類都可以接收這類消息。 (2)命令消息:來自菜單、加速鍵或工具欄按鈕的消息。這類消息都是以WM_COMMAND呈現,在MFC中以ID區分不同命令的消息,在SDK中以wParam參數識別。從CCmdTarget派生的類,接收這類消息。 (3)通告消息:由控件產生的消息。從CCmdTarget派生的類都可以接收這類消息。 2、m_bAutoMenuEnabled=false; 如果m_bAutoMenuEnabled為true,則會依次檢查View、Document、Frame的消息映射表是否有這個彈出菜單中每個菜單項的處理函數,如果沒有就會把那一項改為灰色的。 3、逗號表達式 if(GetDlgItem(IDC_NUMBER1)->GetWindowText(str),str=="Number1:") { } 4、控件訪問方式 (1)GetDlgItem()->Get(Set)WindowText() (2)Get(Set)DlgItemText() (3)Get(Set)DlgItemInt() (4)將控件和變量關聯 (5)將控件和控件變量關聯 (6)SendMessage() (7)SendDlgItemMessage()
?
?
總結
- 上一篇: [转]样式篇之如何实现合并单元格效果
- 下一篇: Xah Lee Web 李杀网