前言:學習C#編程應該有幾個月了,做爲一個菜鳥,沒有資格來評論什麼。只有對本身所學進行一個總結,可能有不嚴謹的地方,萬望諒解。node
一·深刻.NET框架c++
.NET框架(.NET Framework),他是開發.NET應用程序的核心基礎。編程
.NET框架的體系結構數組
支持C#、VB、.NET、c++、等語言的開發,也就是咱們所說的跨語言開發。安全
.NET框架具備兩個主要組件:CLR和FCL。(CLR是Common Language Runtime即公共語言進行時;FCL是Framework Class Library即框架類庫)框架
.NET框架核心類庫及其功能ide
類和對象函數
類定義了一組概念模型,而對象是真實的實體。工具
set訪問器只寫;get訪問器只讀。oop
在vs中自動屬性prop+雙擊Tab鍵
封裝
1.保證數據的安全性。
2.提供清晰的對外接口
3.類內部能夠任意修改,不影響其餘類。
類圖
二.深刻C#數據類型
值類型應用類型
值類型包括基本數據類型,和枚舉類型,結構體等。
引用類型包括string 數組,類和接口。
結構體:
能夠有字段,能夠有方法。
定義時字段不能被賦初值。
不用new。聲明結構對象後必須給結構成員賦初值。
拆箱和裝箱
示例:
int a=1;
object o=i;//裝箱
int j=(int)o;//拆箱
值傳遞和引用傳遞
引用類型做爲參數時:
一、在修改變量自己時,結果相似於值傳遞,即不會改變傳遞前的變量的值
二、在修改變量的屬性或字段時,纔是引用傳遞,會影響到傳遞前的變量的值
三、參數使用了ref後,纔是真正的引用傳遞,無論修改變量自己仍是修改變量的屬性或字段,都會影響到傳遞前的變量的值
值傳遞:傳的是對象的值拷貝。(即函數內參數對象是調用時傳遞的對象的棧中對象的拷貝。)
引用傳遞:傳的是棧中對象的地址。(即函數內參數對象與調用時傳遞的對象徹底是同一棧中對象。)
三.使用集合組織相關數據
System.Collections 命名空間包含接口和類,這些接口和類定義各類對象(如列表、隊列、位數組、哈希表和字典)的集合。
System.Collections.Generic 命名空間包含定義泛型集合的接口和類,泛型集合容許用戶建立強類型集合,它能提供比非泛型強類型集合更好的類型安全性和性能。
System.Collections.Specialized 命名空間包含專用的和強類型的集合,例如,連接的列表詞典、位向量以及只包含字符串的集合。
using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { ArrayList list = new ArrayList(); Console.WriteLine("遍歷方法一:"); foreach (int item in list)//不要強制轉換 { Console.WriteLine(item);//遍歷方法一 } Console.WriteLine("遍歷方法二:"); for (int i = 0; i < list.Count; i++)//數組是length { int number = (int)list[i];//必定要強制轉換 Console.WriteLine(number);//遍歷方法二 } } } }
一、哈希表(Hashtable)簡述
在.NET Framework中,Hashtable是System.Collections命名空間提供的一個容器,用於處理和表現相似key/value的鍵值對,其中key一般可用來快速查找,同時key是區分大小寫;value用於存儲對應於key的值。Hashtable中key/value鍵值對均爲object類型,因此Hashtable能夠支持任何類型的key/value鍵值對.
二、哈希表的簡單操做
在哈希表中添加一個key/value鍵值對:HashtableObject.Add(key,value);
在哈希表中去除某個key/value鍵值對:HashtableObject.Remove(key);
從哈希表中移除全部元素: HashtableObject.Clear();
判斷哈希表是否包含特定鍵key: HashtableObject.Contains(key);
遍歷
foreach(DictionaryEntry item in Hashtable)
{
item.Key;
item.Values;
}
非泛型集合類 | 泛型集合類 |
ArrayList | List<T> |
HashTable | DIctionary<T> |
Queue | Queue<T> |
Stack | Stack<T> |
SortedList | SortedList<T> |
public class Person { protected string ssn = "111-222-333-444" ; protected string name = "張三" ; public virtual void GetInfo() { Console.WriteLine("姓名: {0}", name) ; Console.WriteLine("編號: {0}", ssn) ; } } class Employee: Person { public string id = "ABC567EFG23267" ; public override void GetInfo() { // 調用基類的GetInfo方法: base.GetInfo(); Console.WriteLine("成員ID: {0}", id) ; } }
若是基類中是沒有參數的構造函數
里氏替換原則
在一個軟件系統中,子類能夠替換父類出現的位置,而對軟件的功能沒有任何影響,就稱爲里氏替換原則。
子類能夠擴展父類的功能,但不能改變父類原有的功能。 子類能夠實現父類的抽象方法,但不能覆蓋父類的非抽象方法。 子類中能夠增長本身特有的方法。
當子類的方法重載父類的方法時,方法的前置條件(即方法的形參)要比父類方法的輸入參數更寬鬆。
當子類的方法實現父類的抽象方法時,方法的後置條件(即方法的返回值)要比父類更嚴格。
看上去很難以想象,由於咱們會發如今本身編程中經常會違反里氏替換原則,程序照樣跑的好好的。因此你們都會產生這樣的疑問,假如我非要不遵循里氏替換原則會有什麼後果?
後果就是:你寫的代碼出問題的概率將會大大增長。
例如: Father son=new Son();
C#中有兩個關鍵字能夠提現里氏替換原則:is和as操做符 is操做符用於檢查對象和指定的類型是否兼容。 as操做符主要用於兩個對象之間的類型轉換。
父類類型作參數
示例: 先給幾個類: 1.父類,交通工具類。有一堆屬性。 2.汽車類,繼承父類。 3.地鐵類,繼承父類。 4.員工類。員工乘坐交通工具回家!員工回家的方法,參數是父類對象!
而後建一個員工的集合,初始化員工. 扔到集合裏。就和=能夠用集合的項點出員工回家的方法傳一個子類! 總結這就是子類指向父類!也就是所謂的里氏替換原則!
抽象類和抽象方法
若是一個類不與具體的事物相聯繫,而只是表達一種抽象的概念,僅僅是做爲其派生類的一個基類,這樣的類就是抽象類,在抽象類中聲明方法時,若是加上abstract時就是抽象方法
抽象類與非抽象類的主要區別:
·抽象類不能直接被實例化
·抽象類中能夠包含抽象成員,但非抽象類中不能夠
·抽象類不能是密封的或者靜態的
抽象方法是一個沒有實現的方法,經過在定義方法時增長關鍵字abstract能夠聲明抽象方法。
抽象方法語法
訪問修飾符 abstract 返回值類型 方法名();
注意:抽象方法沒有閉合的大括號,而是直接跟了個「;」也就是說,它沒有包括方法執行邏輯的方法體!
抽象類的定義
語法: 訪問修飾符 abstract class 類名{}
注意: 抽象類提供的抽象方法,這些方法只有定義,如何實現都由抽象類的非抽象子類完成。
抽象類和抽象方法的應用
如何實現一個抽象父類派生的子類 當從一個抽象父類派生一個抽象子類時,子類將繼承父類的全部特徵,包括它未實現的抽象方法。抽象方法必須在子類中實現,除非他的子類也是抽象類。
抽象類和抽象方法的應用
如何實現一個抽象父類派生的子類 當從一個抽象父類派生一個抽象子類時,子類將繼承父類的全部特徵,包括它未實現的抽象方法。抽象方法必須在子類中實現,除非他的子類也是抽象類。
面對對象的三大特性
封裝:保證對象自身數據的完整性和安全性
繼承:創建類之間的關係上,實現代碼複用,方便系統的擴展。
多態:相同的方法調用可實現不一樣的實現方式。
八.可擴展標記性語言XML
1、XML是什麼?做用是什麼?
l XML ( eXtensible Markup Language )語言是一種可擴展的標記語言。其中的可擴展是相對HTML來講的。由於XML標籤沒有被預約義,須要用戶自行定義標籤。
l XML 被設計的宗旨是:是表示數據,而非顯示數據。
操做XML的方法
解析XMl文件
public static void Main(string[] args)
{
XmlDocument doc=new XmlDocument():
doc.Load("Engineer.xml");
XmlNode root=new XmlNode();
foreach(XmlNode item in doc.ChildNodes)
{
switch(node.Name)
{
case "id":
Console.WriteLine(node.InnerText);
break;
}
}
}
XmlDocument doc = new XmlDocument(); doc.Load("北京電視臺.xml"); XmlNode root = doc.DocumentElement; //找根節點 foreach (XmlNode item in root.ChildNodes)//遍歷子節點 { if(item.Name.Equals("tvProgramTable"))//判斷條件是節點的Name是不是"tvProgramTable" { foreach (XmlNode items in item.ChildNodes)//遍歷子節點的子節點 { TvProgram Tp = new TvProgram(); Tp.PlayTime = Convert.ToDateTime(items["playTime"].InnerText); Tp.Meridien = items["meridien"].InnerText; Tp.Path = items["path"].InnerText; Tp.ProgramName = items["programName"].InnerText; ProgramList1.Add(Tp);//綁定到集合 } } } TreeNode minenode = new TreeNode(); minenode.Text = "個人電視臺"; //bind tvList.Nodes.Add(minenode); //根節點 TreeNode root = new TreeNode(); root.Text = "全部電視臺"; //bind tvList.Nodes.Add(root); ChannelManager manager = new ChannelManager(); manager.ResolveChannels(); List<ChannelBase> list = manager.List; foreach (ChannelBase item in list) { TreeNode tn = new TreeNode(); tn.Text = item.ChannelName; tn.Tag = item; root.Nodes.Add(tn); }
九.文件操做
如何讀寫文件
引入using.System.IO;
string path=txtFilePath.Text;
string content=txtContent.Text;
if(path.Equals(null)||path.Equals(""))
{
MessageBox.Show("文件的路徑不爲空");
return;
}
try
{
FileStream nyfs=new FileStream(path,FileMode.Create)
streamWriter mysw=new StreamWriter(myfs);
mysw.Write(content);
mysw.Close();
myfs.Close();
MessageBox.Show("寫入成功");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
文件流
語法
FileStream 文件流對象=new FileStream(string filePath,FileMode fileMode);
文件讀寫器
StreamWriter 寫入器
StreamWriter mysw=new StreamWriter();
解決亂碼問題
FileStream myfs=new FileStream(path,FileMode.Open)
StreamReader mySr=new StreamReader(myfs,Encoding.Default);
content=mySr.ReadToEnd();
txtContent.Text=content;
文件和目錄操做
File類和Directory類
File類經常使用的方法
Exites(string path) 用於檢查指定文件是否存在
copy()複製文件
Move()移動文件
Delete()刪除文件
示例 小型資源管理器
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Chap09_資源管理器 { class MyFile { public string FileName { get; set; } public long FileLength { get; set; } public string FileType { get; set; } public string FilePath { get; set; } } } using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.Diagnostics; namespace Chap09_資源管理器 { public partial class FrmMain : Form { public FrmMain() { InitializeComponent(); } private void FrmMain_Load(object sender, EventArgs e) { DriveInfo[] di = DriveInfo.GetDrives(); foreach (DriveInfo item in di) { TreeNode tn = new TreeNode(item.Name); tn.Tag = item.Name; tvList.Nodes.Add(tn); } } public void BindInfo(TreeNode node) { try { lvList.Items.Clear(); DirectoryInfo dir = new DirectoryInfo(node.Tag.ToString()); DirectoryInfo[] dirs = dir.GetDirectories(); foreach (DirectoryInfo item in dirs) { TreeNode tn = new TreeNode(); tn.Text = item.Name; tn.Tag = item.FullName; node.Nodes.Add(tn); } FileInfo[] fi = dir.GetFiles(); List<MyFile> files = new List<MyFile>(); foreach (FileInfo item in fi) { MyFile mf = new MyFile(); mf.FileName = item.Name; mf.FileLength = item.Length; mf.FileType = item.Extension; mf.FilePath = item.FullName; files.Add(mf); } foreach (MyFile item in files) { ListViewItem items = new ListViewItem(item.FileName); items.SubItems.Add(item.FileLength.ToString()); items.SubItems.Add(item.FileType); items.SubItems.Add(item.FilePath); lvList.Items.Add(items); } } catch (Exception ex) { MessageBox.Show(""+ex.Message); } } private void tvList_AfterSelect(object sender, TreeViewEventArgs e) { TreeNode node = this.tvList.SelectedNode; this.BindInfo(node); } private void lvList_DoubleClick(object sender, EventArgs e) { Process.Start(lvList.SelectedItems[0].SubItems[3].Text); } private void 複製ToolStripMenuItem_Click(object sender, EventArgs e) { FolderBrowserDialog fbd = new FolderBrowserDialog(); DialogResult result = fbd.ShowDialog(); string sourcePath = lvList.SelectedItems[0].SubItems[3].Text; string desPath = null; if(result==DialogResult.OK) { desPath = fbd.SelectedPath; desPath += "\\" + lvList.SelectedItems[0].SubItems[0].Text; File.Copy(sourcePath,desPath); MessageBox.Show("複製成功"); } } private void 刪除ToolStripMenuItem_Click(object sender, EventArgs e) { lvList.Items.Clear(); string deletePath=lvList.SelectedItems[0].SubItems[3].Text; File.Delete(deletePath); MessageBox.Show("刪除成功"); } } }
啓動後就是這樣能夠讀出本身硬盤上的東西!
好了就寫到這了。總結到這裏了。