最近工作壓力比較大,不得已開始自學C#。同時網站開發業務開展迫在眉睫,只能先從ASP.NET學起。回想一下,連C#和ASP.NET的關係都沒有明白,就被趕鴨子上架了。。。我覺得這將是我工作以來最具有戲劇性的一筆!! 話不多說,網上搜了一下洞庭夕照的“學用MVC4做網站”,感覺最後從我現在的水平看實在 ...
最近工作壓力比較大,不得已開始自學C#。同時網站開發業務開展迫在眉睫,只能先從ASP.NET學起。回想一下,連C#和ASP.NET的關係都沒有明白,就被趕鴨子上架了。。。我覺得這將是我工作以來最具有戲劇性的一筆!!
話不多說,網上搜了一下洞庭夕照的“學用MVC4做網站”,感覺最後從我現在的水平看實在是驚為天人之作,於是便開始一邊看一邊做了起來,無奈這位兄臺技術在我之上不知多高,很多東西直接省略不講,看得我實在費力,又找不到更好的教程,只能一邊看一邊百度。
這一筆真的濃厚。。。
一、中括弧
Model 類里[Key]這個東西,類似於JAVA里的反射,ASP.NET:類中使用中括弧([...])的作用。該標記不起任何實際作用,僅是告訴vs該語句下麵的方法(Method)是ObjectDataSource的預設綁定方法,標記的作用是為了讓編譯器更好的為 ObjectDatasource 嚮導找到合適的方法。但是要加上using System.ComponentModel.DataAnnotations;這條引用。
二、/// <summary>
C#中在註釋函數的時候連用3個斜杠,即“///”編譯器會自動生成函數相關的註釋段,但是需要具體的編譯器代碼提示,那還需要添加相應的內容。
先寫好函數或方法,然後在函數或方法的上一行輸入“///”後,系統會自動出來<summayr>.....</summary>以及參數等,在補全說明即可
三、datetime? 和 datetime 有什麼區別
CSharp中,有兩種類型的變數。
基本類型和引用類型
基本類型變數在定義一個變數的時候,不允許將該變數設置為null。但是在有的時候,我們又希望該基本類型擁有可以為null的能力。所以我們在該基本類型後面 加? 就可以將該基本類型變成應用類型。如 int => int? long => long? 等
此時 int? 定義的變數,就是應用類型了,可以為null,而不再是一個基本的類型。所有的基本類型轉換成的引用類型,都有value這個屬性,該屬性是該應用的值。所有 datetime = datetime?.value
四、[HttpPost]
System.Web.Mvc.dll中對它的註解是:表示一個特性,該特性用於限制操作方法,以便該方法僅處理 HTTP POST 請求。
具體來講,就是在對於Mvc Controller中的方法,如果你希望該方法只能通過前臺表單的Post方式來訪問並且傳輸數據的話,通過添加[HttpPost]註解即可實現,這樣,該方法就不會通過Get方法進行請求,限制了該操作方法的請求類型。
五、Repository模式
這個模式很深奧,在這裡只能先列舉一下簡單的釋義,隨後再深入學習。
六、DbSet<TEntity>類和DbContext類
dbContext裡面的dbset<TEntity>屬性的多少 能對系統造成性能影響嗎?
一語驚醒夢中人。看代碼總是有dbset<TEntity>,但一直不知道是什麼解釋,今天搜到這個問題,原來是一個屬性,或者是給定類型的所有實體的集合或可從資料庫中查詢的給定類型的所有實體的集合。 可以使用 DbContext.Set 方法從 DbContext 中創建 DbSet 對象。不過兩個使用的區別是什麼?
MVC中使用Entity Framework 基於方法的查詢學習筆記 (二)
七、數據上下文
數據上下文,就是當前對象(主要是UI元素)與之綁定的數據對象。所有對該控制項的數據綁定({Binding})如果不額外聲明Source,則預設的Source就是DataContext指向的數據對象。可以理解為 DataSource
或者
數據上下文就是不止它自身可以訪問,其子元素皆可訪問。
比如有這麼一個數據類型:
public class Person
{
public int ID{get;set;}
public string Name{get;set;}
public int Age{get;set;}
public string Address{get;set;}
}
將該類型的一個實例設置為某UserControl的DataContext;
this.DataContext = new Person();
那麼在xaml中,binding時就是使用的這個上下文
<UserControl ...>
<StackPanel>
<TextBlock Text={Binding ID}/>
<TextBlock Text={Binding Name}/>
<TextBlock Text={Binding Age}/>
<TextBlock Text={Binding Address}/>
</StackPanel>
</UserControl>
你只是將Person對象賦給了UserControl的DataContext,但是其內部的TextBlock依然可以訪問得到這個對象的屬性。
八、virtula與override
在基類(父類)中用virtual修飾符聲明一個虛方法,然後在在派生類(子類)中用override修飾符覆蓋基類虛方法。表明是對基類的虛方法重載。這種優勢在於它可以在程式運行時再決定調用哪一個方法,這就是所謂的“運行時多態”或者稱動態綁定。
九、~
這是什麼?!C#里的各種符號也是醉了。。。
析構函數(destructor) 與構造函數相反,當對象脫離其作用域時(例如對象所在的函數已調用完畢),系統自動執行析構函數。析構函數往往用來做“清理善後” 的工作(例如在建立對象時用new開闢了一片記憶體空間,應在退出前在析構函數中用delete釋放)。析構函數名也應與類名相同,只是在函數名前面加一個波浪符~,例如~stud( ),以區別於構造函數。它不能帶任何參數,也沒有返回值(包括void類型)。只能有一個析構函數,不能重載。如果用戶沒有編寫析構函數,編譯系統會自動生成一個預設的析構函數,它也不進行任何操作。所以許多簡單的類中沒有用顯式的析構函數。
十、 seal
1、當對一個類應用 sealed 修飾符時,此修飾符會阻止其他類從該類繼承。 在下麵的示例中,類 B 從類 A 繼承,但是任何類都不能從類 B 繼承。
class A {}
sealed class B : A {}
2、還可以在重寫基類中的虛方法或虛屬性的方法或屬性上使用 sealed 修飾符。 這將使您能夠允許類從您的類繼承,並防止它們重寫特定的虛方法或虛屬性
在下麵的示例中,Z 從 Y 繼承,但 Z 無法重寫在 X 中聲明併在 Y 中密封的虛函數 F。
class X
{
protectedvirtualvoid F() { Console.WriteLine("X.F"); }
protectedvirtualvoid F2() { Console.WriteLine("X.F2"); }
}
class Y : X
{
sealedprotectedoverridevoid F() { Console.WriteLine("Y.F"); }
protectedoverridevoid F2() { Console.WriteLine("X.F3"); }
}
class Z : Y
{
// Attempting to override F causes compiler error CS0239.
// protected override void F() { Console.WriteLine("C.F"); }
// Overriding F2 is allowed.
protectedoverridevoid F2() { Console.WriteLine("Z.F2"); }
}
十一、=>
又一個符號,明白了就覺得好用,不明白的看著這麼個玩意真的很蛋疼!