1.初级ASP.NET工程师
2.C#语言基础
2.C#的值类型
using System;
namespace lession2
{
//enum:byte{} enum:short{}
enum Days { Monday=1, Tuesday, Wenesday, Thursday, FriDay, Saturday, Sunday };
class Program
{
///
/// Main function
///
/// args
static void Main(string[] args)s
{
int intValue = 0;
System.Int32 intValue2 = 0;
int intValue3 = new int();
bool boolValue = true;//System.Boolean
//sturct,enum;
//System.ValueType,System.Object
// /**/
Person person = new Person();
person.age = 10;
Console.WriteLine(person.age);
Console.WriteLine(Days.Monday);
var day = Days.Thursday;
Console.WriteLine(day);
Console.WriteLine((int)day);
Console.ReadLine();
}
struct Person
{
public int age;
private string name;//该类中可以访问
internal string fname;//在命名空间内可以访问
//protected string lastname;//有继承关系的可以访问
}
}
}
3.C#的引用类型-part1
using System;
using System.Text;
namespace lession3
{
class Program
{
static void Main(string[] args)
{
// object,string dynamic
// System.Object,System.String,System.Dynamic(在程序的运行阶段,其他是编译阶段)
object o = new object();
object o2 = new Object(); // System.Ojbect;
Console.WriteLine(o.GetType());
Console.WriteLine(o.ToString());
int i = 5;
Console.WriteLine(i.ToString());
string s = "zilong";
string s2 = "zi";
s2 += "long";
Console.WriteLine(s);
Console.WriteLine(s2);
Console.WriteLine(s == s2);
Console.WriteLine((object)s == (object)s2);
char c = s[2];
Console.WriteLine(c);
string u = "\\\u0066\n";
Console.WriteLine(u);
string at = @"E:\zilong\ASP.NET工程师\1.初级ASP.NET工程师\2.C#语言基础\3.C#的引用类型";
Console.WriteLine(at);
string noAt = "E:\\zilong\\ASP.NET工程师\\1.初级ASP.NET工程师\\2.C#语言基础\\3.C#的引用类型";
Console.WriteLine(noAt);
at.Contains("zilong");
Console.WriteLine(at.Length);
Console.WriteLine(at.IndexOf("zi"));
StringBuilder builder = new StringBuilder();
builder.Append("zi");
builder.Append("long");
Console.WriteLine(builder.ToString());
builder.AppendFormat(" hello {0} {1}", "zilong", "world");
Console.WriteLine(builder.ToString());
Console.ReadLine();
}
}
}
3.C#的引用类型-part2
using System;
namespace lession4
{
class Program
{
static void Main(string[] args)
{
var person = new Person(5);
Console.WriteLine(person.GetAge());
Console.WriteLine(Person.GetFive());
//person.GetFive();//Error
Console.WriteLine(person.Age);//默认值为0;
person.Age = 10;//这是一个属性
Console.WriteLine(person.GetAge());
Console.ReadLine();
}
}
class Person:Man,ISuper
{
int age;
public int Age
{
get
{
return age + 10;
}
set
{
age = value - 10;
}
//private set;
}
public Person(int myAge)
{
this.age = myAge;
}
public int GetAge()// 默认修饰符为private
{
return age;
}
public static int GetFive()
{
return 5;
}
public int GetSuper()
{
return age + 100;
}
public override int GetAbstract()
{
return 50;
}
}
abstract class Man
{
public string name;
public string GetName()
{
return name;
}
public abstract int GetAbstract();
}
interface ISuper//只能有方法,索引,属性(property)
{
//int name;//接口不能包含字段
int GetSuper();
}
}
4.C#的类型转换
using System;
namespace Lession5TypeConvertion
{
class Program
{
static void Main(string[] args)
{
//隐式转换
int i = 10;
long l = i;
C1 c1 = new C2();
//显示转换
double d = 10.05;
int iFromD = (int)d;
Console.WriteLine(iFromD);
C1 c11 = new C1();
//C2 c2 = (C2)c11;
try
{
C2 c2 = (C2)c11;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
Console.WriteLine(c11 is C1);//true
Console.WriteLine(c11 is C2);//false
C2 c22 = c11 as C2;//编译成功,运行成功,无法转换时,返回null.
Console.WriteLine(c22 == null);//true,降低消耗,只能用于非null类型或引用类型,比如值类型,就不是非null类型
//int iAs = "s" as int;
//错误 1 as 运算符必须用于引用类型或可以为 null 的类型(“int”是不可以为 null 值的类型) E:\极客学院2\ASP.NET工程师\1.初级ASP.NET工程师\2.C#语言基础\4.C#的类型转换\Lession5TypeConvertion\Lession5TypeConvertion\Program.cs 38 23 Lession5TypeConvertion
Console.WriteLine("------------------------");
string sFrom1 = i.ToString();
int iFroms = Convert.ToInt32("10");
//int iFroms2 = Convert.ToInt32("zilong");//System.FormatException
int iFrom3 = Int32.Parse("101");
//int iFrom4 = Int32.Parse("zilong");//System.FormatException
int iFrom5;
bool succeed = Int32.TryParse("zilong", out iFrom5);
Console.WriteLine(iFrom5);//0
//IConvertible,TypeConverter
Console.WriteLine("------------------------");
int iToBoxing = 100;
object iBoxed = iToBoxing;
int iUnBoxing = (int)iBoxed;
object nullOjbect = iFrom5;
int iNUll = (int)nullOjbect;
int? iNUllable = null; // = null;
System.Nullable iNUllable2 = 100;//和上一句等价
//Console.WriteLine(iNUllable.Value);
Console.WriteLine(iNUllable.HasValue);
Console.WriteLine(iNUllable.GetValueOrDefault());
Console.WriteLine(iNUllable2.GetValueOrDefault());
int iii = iNUllable ?? 999;
int iiii = iNUllable2 ?? 999;
Console.WriteLine(iii);
Console.WriteLine(iiii);
Console.ReadLine();
}
}
class C1
{ }
class C2 : C1
{ }
}
5.C#的逻辑语句
using System;
using System.Collections.Generic;
namespace Lession5Statement
{
class Program
{
static void Main(string[] args)
{
#region Condition
bool condition = true;
//if(true)
//if (condition)
int ten = 10;
//if (ten >10)
//if (!false && true)
//if (!false || true)//if(!false & false)
object nullObject = null;
//if (!false || (bool)nullObject)
if (ten > 100)
{
Console.WriteLine("True Condition");
if (true)
{
Console.WriteLine("true and true");
}
}
else if (ten > 5)
{
Console.WriteLine("ten > 5 and tem <= 100");
}
else
{
Console.WriteLine("Else is Here");
}
ten = 100;
int ifelse = ten < 100 ? ten : 99;
Console.WriteLine(ifelse);
int switchKey = 100;
switch(switchKey)
{
case 10:
Console.WriteLine("switchKey is 10");
break;
case 100:
Console.WriteLine("switchKey is 10");
break;
default:
Console.WriteLine("I don't know switch key");
break;
}
#endregion
#region Loop
for (int i = 0; i < 5;i++ )
{
Console.WriteLine(i);
if(i==3)
{
break;//continute
}
}
int iValue;
int jValue = 10;
for(iValue=0,Console.WriteLine("Start:{0}",iValue);iValue listInt = new List() { 1, 2, 3, 4 };
foreach (var intInList in listInt)//实现了IEnumerable接口
{
Console.WriteLine(intInList);
}
int n = 1;
//n++ n=n+1
//++n
while(n++ < 6)
{
Console.WriteLine("n is {0}", n);
}
do
{
Console.WriteLine("time");
}
while (false);
#endregion
Console.ReadLine();
}
}
}
6.C#的集合类型
using System;
using System.Collections;
using System.Collections.Generic;
namespace Lession6Collection
{
class Program
{
static void Main(string[] args)
{
#region Array
//值类型,应用类型
//System.Array
int[] numbers = new int[5];
string[,] names = new string[5, 4];//二位数组
byte[][] scores = new byte[5][];
for (int i = 0; i < scores.Length; i++)
{
scores[i] = new byte[i + 3];
}
for (int i = 0; i < scores.Length; i++)
{
Console.WriteLine("Length of row {0} is {1}", i, scores[i].Length);
}
int[] numbers2 = new int[5] { 1, 2, 3, 4, 5 };
int[] numbers3 = new int[] { 1, 2, 3, 4, 5 };
int[] numbers4 = { 1, 2, 3, 4, 5 };
string[,] names2 = { { "g", "k" }, { "h", "j" } };
int[][] numbers5 = { new int[] { 1, 2, 3 }, new int[] { 4, 5, 6, 7 } };
Console.WriteLine(numbers2[2]);
Console.WriteLine(numbers2.Length);
//IEnumerable,IEnumerator
foreach (int i in numbers2)
{
Console.WriteLine(i);
}
#endregion
#region ArrayList,List
Console.WriteLine("------------------------");
ArrayList al = new ArrayList(); //object
al.Add("zilong");
al.Add(5);
al.Add(100);
al.Remove(5);
foreach(var e in al)
{
Console.WriteLine(e);
}
Console.WriteLine(al[0]);
List intList = new List();
intList.Add(500);
intList.AddRange(new int[] { 501, 502 });
Console.WriteLine(intList.Contains(2000));
Console.WriteLine(intList.IndexOf(2000));
intList.Remove(500);
intList.Insert(2, 999);
#endregion
#region Hashtable,Dictionay,SortList,Stack,Queue
Console.WriteLine("------------------------");
Hashtable ht = new Hashtable();//object,object
ht.Add("first", "zi");
ht.Add("second", "long");
ht.Add(100, 100);
Console.WriteLine(ht["second"]);
Console.WriteLine(ht[100]);
Console.WriteLine(ht[99]);//return null;
Dictionary d = new Dictionary();//指定类型
d.Add("first", "zilong");
//d.Add(100,100)
//Console.WriteLine(d["99"]);//抛出异常
//Dictionary在多线程里,不是线程安全
//应该使用 ConcurrentDictionary
SortedList sl = new SortedList();//根据key排序
sl.Add(5,105);
sl.Add(2,102);
sl.Add(9, 95);
foreach(var sle in sl)
{
Console.WriteLine(sle.Value);
}
//stack queue
Stack stack = new Stack();
stack.Push(1); stack.Push(2); stack.Push(3); stack.Push(4); stack.Push(5);
while(stack.Count >0)
{
Console.WriteLine(stack.Pop());
}
Queue queue = new Queue(5);
queue.Enqueue(1); queue.Enqueue(2); queue.Enqueue(3); queue.Enqueue(4); queue.Enqueue(5);
while(queue.Count > 0)
{
Console.WriteLine(queue.Dequeue());
}
#endregion
Console.ReadLine();
}
}
}
7.C# 的面向对象特性之封装
AnotherAssembly
using System;
namespace AnotherAssembly
{
public class Class1
{
internal protected string internalProtectdString = "zilong";
internal protected string GetString()
{
return internalProtectdString;
}
}
}
Lession7Encapsulation.AnotherNamespaceClass
namespace Lession7EncapsulationAnother
{
class AnotherNamespaceClass
{
internal string internalString = "zilong";
}
}
Lession7Encapsulation.Program
using Lession7EncapsulationAnother;
using System;
using AnotherAssembly;
namespace Lession7Encapsulation
{
class Program
{
static void Main(string[] args)
{
//public,private,internal,protected,internal protected
//public 对外开放
//private 对外不开放
Person person = new Person();
Console.WriteLine(person.GetAge());
//internal 对同一个Assembly(程序集)开放
//assembley vs namespace,一个assembly里可以声明多个命名空间
//物理的包vs逻辑的概念
AnotherNamespaceClass anc = new AnotherNamespaceClass();
Console.WriteLine(anc.internalString);
//protected 本身的Class或者继承它的Class里可用
Man man = new Man();
Console.WriteLine(man.GetPersonName());
//internal protected
Class1 class1 = new Class1();
//Console.WriteLine(class1);
Class2 class2 = new Class2();
//Console.WriteLine(class2);
Console.WriteLine(class2.GetString2());
Console.WriteLine(class2.GetString2());
Console.ReadLine();
}
}
class Class2:Class1
{
public string GetString2()
{
return this.internalProtectdString;
}
public void GetString3()
{
GetString();
}
}
class Person
{
private int age;
protected string name;
public int GetAge()
{
return age;
}
public int Age
{
//get { return age;}
get
{
if(CheckAge())
{
return age;
}
return -1;
}
set { age = value; }
}
private bool CheckAge()
{
if(age<0)
{
return false;
}
return true;
}
}
class Man:Person
{
public string GetPersonName()
{
return this.name;
}
}
}
8.C# 的面向对象特性之继承
using System;
namespace lession9Inheritance
{
class Program
{
static void Main(string[] args)
{
Dog dog = new Dog();
dog.Age = 10;
dog.Bite();
dog.GetAge();
dog.BiteMan();
Console.WriteLine("----------------------");
Dog oldDog = new Dog(17);
Console.WriteLine("----------------------");
Animal dog2 = new Dog();
dog2.Bite();
dog2.BiteMan2();
((Dog)dog2).BiteMan2();
Console.ReadLine();
}
}
class Animal
{
public int Age { get; set; }
public Animal()
{
Console.WriteLine("Animal constructor");
}
public Animal(int age)
{
Console.WriteLine("Old Animal constructor");
this.Age = age;
}
public virtual void Bite()
{
Console.WriteLine("Animal bite");
}
public virtual void GetAge()
{
Console.WriteLine(this.Age);
}
public virtual void BiteMan()
{
Console.WriteLine("Animal bite man");
}
public void BiteMan2()
{
Console.WriteLine("Animal bite man2");
}
}
//sealed class Dog : Animal //sealed 关键字表示该类无法被继承
class Dog : Animal
{
public Dog()
{
Console.WriteLine("Dog constructor");
}
//public Dog(int age):base(age)
public Dog(int age)
: this()
{
Console.WriteLine("Old Dog constructor");
this.Age = age;
}
public override void Bite()
{
//base.Bite();
Console.WriteLine("Dog bite");
}
public override void BiteMan()
{
Console.WriteLine("Dog bite man");
}
public new void BiteMan2()
{
Console.WriteLine("Dog bite man2");
}
}
class JinMao : Dog
{
}
}
9.C#的面向对象特性之多态
using System;
namespace Lession9Polymorphism
{
class Program
{
static void Main(string[] args)
{
PrintHello();
PrintHello("world");
Complex c1 = new Complex();
Complex c2 = new Complex();
c1.Number = 2;
c2.Number = 3;
Complex c3 = c1 + c2;
Console.WriteLine(c3.Number);
//动态多态
//some logic
//Human h = new Human();
//h.CleanRoom();
//if(h is Man)
// h.CleanRoomSlowly();
//else if(h is woman)
// h.CleanRoomQuickly();
//some logic
//some logic
//Human h = new Human();
//h.CleanRoom();
//some logic
Human human1 = new Man();
Human human2 = new Woman();
human1.ClearnRoom();
human2.ClearnRoom();
Console.WriteLine(c2);
Console.ReadLine();
}
public static void PrintHello()
{
Console.WriteLine("Hello");
}
public static void PrintHello(string toWho)
{
Console.WriteLine("Hello {0}", toWho);
}
//public static string PrintHello()
//{
// return "Hello";
//}
}
class Complex
{
public int Number { get; set; }
public static Complex operator +(Complex c1, Complex c2)
{
Complex c = new Complex();
c.Number = c1.Number + c2.Number;
return c;
}
public override string ToString()
{
return Number.ToString();
}
}
class Human
{
public virtual void ClearnRoom()
{
Console.WriteLine("Human Clean Room");
}
}
class Man : Human
{
public override void ClearnRoom()
{
Console.WriteLine("Man Clean Room Slowly");
}
}
class Woman : Human
{
public override void ClearnRoom()
{
Console.WriteLine("Woman Clean Room Quickly");
}
}
}
2.中级ASP.NET工程师
1.C#语言进阶
1.C# 的异常处理机制
using System;
using System.IO;
namespace ExceptionHandle
{
class Program
{
static void Main(string[] args)
{
int x = 0;
try
{
int y = 100 / x;
}
catch(NullReferenceException e) // System.Exception
{
Console.WriteLine(e.Message);
throw;
}
catch (DivideByZeroException e)
{
Console.WriteLine(e.Message);
}
//catch(Exception e) //第一开销太大,第二不能更细致处理异常
//{
// Console.WriteLine(e.Message);
//}
finally
{
Console.WriteLine("Anyway,we arrive here!");
}
Console.WriteLine("After try catch");
//throw new NullReferenceException();
#region 常见异常
var ae = new ArgumentException();
var ane = new ArgumentNullException();
var aore = new ArgumentOutOfRangeException();
var dne = new DirectoryNotFoundException();
var foe = new FileNotFoundException();
var ioe = new InvalidCastException();
var nie = new NotImplementedException();
#endregion
if(true)
{
//logic
}
try //异常的处理开销很大
{
throw new Exception();
}
catch(Exception e)
{
//logic
}
Console.ReadKey();
}
}
}
2.C# 的 IO 操作
IO
using System;
using System.IO;
namespace IO
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(File.Exists(@"C:\HelloIO\IO.txt"));
Console.WriteLine(Directory.Exists(@"C:\HelloIO\"));
string path = ".";
if(args.Length > 0)
{
if(Directory.Exists(args[0]))
{
path = args[0];
}
else
{
Console.WriteLine("{0} not found; using current dirctory;", args[0]);
}
}
DirectoryInfo dir = new DirectoryInfo(path);
foreach(FileInfo f in dir.GetFiles("*.exe"))
{
string name = f.Name;
long size = f.Length;
DateTime createionTime = f.CreationTime;
Console.WriteLine("{0,-12:N0} {1,-20:g} {2}", size, createionTime, name);
}
Console.ReadKey();
}
}
}
IORead
using System;
using System.IO;
namespace IORead
{
class Program
{
private const string FILE_NAME = "Test.txt";
static void Main(string[] args)
{
if (!File.Exists(FILE_NAME))
{
Console.WriteLine("{0} does not exist!", FILE_NAME);
Console.ReadLine();
return;
}
using(StreamReader sr = File.OpenText(FILE_NAME))
{
string input;
while((input = sr.ReadLine()) != null)
{
Console.WriteLine(input);
}
Console.WriteLine("The end of the stream");
sr.Close();
}
//FileStream fs = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read);
//BinaryReader r = new BinaryReader(fs);
//for (int i = 0; i < 11; i++)
//{
// Console.WriteLine(r.ReadString());
//}
//r.Close();
//fs.Close();
Console.ReadLine();
}
}
}
IOWrite
using System;
using System.IO;
namespace IOWrite
{
class Program
{
private const string FILE_NAME = "Test.txt";
static void Main(string[] args)
{
//if(File.Exists(FILE_NAME))
//{
// Console.WriteLine("{0} aleady existes!", FILE_NAME);
// Console.ReadLine();
// return;
//}
//FileStream fs = new FileStream(FILE_NAME,FileMode.Create);
//BinaryWriter w = new BinaryWriter(fs);
//for(int i=0;i<11;i++)
//{
// w.Write("a");
//}
//w.Close();
//fs.Close();
using(StreamWriter w = File.AppendText("test.txt"))
{
Log("hehe", w);
Log("Hello jikexueyuan", w);
w.Close();
}
}
public static void Log(string logMessage,TextWriter w)
{
w.Write("\r\nLog Entry:");
w.Write(" :{0}", logMessage);
w.Flush();
}
}
}
3.C# 的索引器
using System;
namespace Indexer
{
class Program
{
static void Main(string[] args)
{
var names = new IndexedNames();
names[0] = "hello";
names[1] = "zilong";
names[2] = "we";
names[3] = "are";
names[4] = "leaning";
names[5] = "C#";
names[6] = "Indexer";
names[7] = "-";
names[8] = "Indexex";
names[9] = "syntax";
for(int i =0; i<10;i++)
{
Console.WriteLine(names[i]);
}
Console.WriteLine(names["C#"]);
Console.WriteLine(names["syntax"]);
Console.WriteLine(names["2016"]);
Console.ReadLine();
}
}
class IndexedNames
{
private string[] nameList = new string[10];
public IndexedNames()
{
for(int i=0;i=0 && index <= nameList.Length-1)
{
tmp = nameList[index];
}
else
{
tmp = "";
}
return tmp;
}
set
{
if (index >= 0 && index <= nameList.Length - 1)
{
nameList[index] = value;
}
}
}
public int this[string name]
{
get
{
int index = 0;
while (index < nameList.Length)
{
if (nameList[index] == name)
{
return index;
}
index++;
}
return -1;
}
}
}
class Employee //不合理的演示,不符合语法的语义
{
public double this[int year]
{
get
{
//return salary;
return 0;
}
}
}
public interface ISomeInterface
{
int this[int index]
{
get;
set;
}
}
}
4.C# 的委托
Delegate
using System;
namespace Delegate
{
delegate int NumberChanger(int p);
class Program
{
static int num = 10;
static void Main(string[] args)
{
//System.Delegate delegate
NumberChanger change = new NumberChanger(AddNum);
change(20);
Console.WriteLine("value of num: {0}", num);
//实例方法的委托
Console.WriteLine("------------------------------");
MyClass mc = new MyClass();
NumberChanger change2 = new NumberChanger(mc.AddNum);
change2(120);
Console.WriteLine("value of instance num:{0}", mc.num);
NumberChanger change3 = new NumberChanger(mc.MultiNum);
change3(2);
Console.WriteLine("value of instance num:{0}", mc.num);
Console.ReadLine();
}
public static int AddNum(int p)
{
num += p;
return num;
}
}
class MyClass
{
public int num = 10;
public int AddNum(int p)
{
num += p;
return num;
}
public int MultiNum(int p)
{
num *= p;
return num;
}
}
}
MultiCasingDelegate
using System;
namespace MultiCasingDelegate
{
delegate void D(int i);
class Program
{
static void Main(string[] args)
{
D cd1 = new D(C.M1);
cd1(-1);
Console.WriteLine();
D cd2 = new D(C.M2);
cd2(-2);
Console.WriteLine();
//委托有一个按顺序的调用列表(类似Stack)
D cd3 = cd1 + cd2;
cd3(-3);
Console.WriteLine();
C c = new C();
D cd4 = new D(c.M3);
cd3 += cd4;
cd3(-9);
Console.WriteLine();
cd3 += cd1;
cd3(-9);
Console.WriteLine();
cd3 -= cd1;
cd3(-9);
Console.WriteLine();
cd3 -= cd4;
cd3 -= cd2;
cd3 -= cd2;
//cd3 -= cd1;
if(cd3 != null)//避免空引用异常
{
cd3(77);
}
cd3 -= cd1;
//即使空了之后一样可以编译和运行,但该操作是无效的
cd3 -= cd1;
Console.ReadLine();
}
}
class C
{
public static void M1(int p)
{
Console.WriteLine("M1 : {0}", p);
}
public static void M2(int p)
{
Console.WriteLine("M2 : {0}", p);
}
public void M3(int p)
{
Console.WriteLine("M3 : {0}", p);
}
}
}
5.C# 的事件
Event
using System;
namespace Event
{
public delegate void EventHandler2(object sender,EventArgs e);
class Program
{
static void Main(string[] args)
{
var e = new EventTest(5);
e.SetValue(10);
e.ChangeNum +=
new EventTest.NumMainipulationHandler(EventTest.EventFired);
e.SetValue(100);
Console.WriteLine("------------------------");
I i = new MyClass();
i.MyEvent += new MyDelegate(f);
i.FireAway();
Console.ReadLine();
}
public static void f()
{
Console.WriteLine("This is called when the event fired");
}
}
class EventTest
{
private int value;
public delegate void NumMainipulationHandler();
//那一种的Delegate可以绑定到Event上
public event NumMainipulationHandler ChangeNum;
//规定Delegate的范围(Delegate也可以实现Event的所有功能)
//但是Delegate限制的是Method,Event限制的是Delegate
//Button.Click为EventHanlder类型的Event
public EventTest(int n)
{
SetValue(n);
}
public static void EventFired()
{
Console.WriteLine("Binded event fired");
}
public virtual void OnNumChanged()
{
if (ChangeNum != null)
{
ChangeNum();
}
else
{
Console.WriteLine("Event Fired");
}
}
public void SetValue(int n)
{
if (value != n)
{
value = n;
OnNumChanged();
}
}
}
public delegate void MyDelegate();
public interface I
{
event MyDelegate MyEvent;
event EventHandler MyGuidlineEvent;//sender,EventArgs
void FireAway();
}
public class MyClass : I
{
public event MyDelegate MyEvent;
public void FireAway()
{
if(MyEvent != null)
{
MyEvent();
}
}
}
}
WinFormEvent
using System;
using System.Windows.Forms;
namespace WinFormEvent
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello Button");
}
}
}
6.C# 的泛型
Generic
using System;
namespace Generic
{
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
//泛型在Class上的实现
MyGenericArray intArray = new MyGenericArray(5);
for (int index = 0; index < 5; index++)
{
intArray.SetItem(index, index * 5);
}
for (int index = 0; index < 5; index++)
{
Console.Write(intArray.GetItem(index) + " ");
}
Console.WriteLine();
MyGenericArray charArray = new MyGenericArray(5);
for (int index = 0; index < 5; index++)
{
charArray.SetItem(index, (char)(index + 97));
}
for (int index = 0; index < 5; index++)
{
Console.Write(charArray.GetItem(index) + " ");
}
Console.WriteLine();
Console.WriteLine("------------------------");//泛型在方法上的实现
ParentGeneric gm = new ParentGeneric();
gm.GenericMethod("Hello Generic Method");
gm.GenericMethod(100);
string s1 = "hello";
string s2 = "zilong";
Swap(ref s1,ref s2);
Console.WriteLine("item1 = {0}, item2 = {1}", s1, s2);
int i1 = 100;
int i2 = 99;
Swap(ref i1, ref i2);
Console.WriteLine("item1 = {0}, item2 = {1}", i1, i2);
Console.ReadLine();
}
public static void Swap(ref T item1,ref T item2)
{
T temp = item1;
item1 = item2;
item2 = temp;
}
}
//1.提高数据的重用性
//2.类型安全的,在实例化的时候规定的它的数据类型
//3.这样写性能也是比较好的,因为用泛型的话不用编译那么多代码
public class MyGenericArray
//public class MyGenericArray //例如Dictionary
where T : struct
where K : class
//认真查查泛型where的几个类型,struct为值类型,如果用了string,则不能通过编译
//strut,class,interface,instance class(Employee,Employee的继承类),Attribute
{
private T[] array;
public MyGenericArray(int size)
{
array = new T[size + 1];
}
public T GetItem(int index)
{
return array[index];
}
public void SetItem(int index, T item)
{
array[index] = item;
}
}
public class ParentGeneric
where T : struct
where K : class
{
//实现一个泛型的方法
public void GenericMethod(X x)
{
Console.WriteLine(x.ToString());
}
}
public class SubClass : ParentGeneric
{ }
public class SubGeneriClass : ParentGeneric
where T : struct
where K : class
{ }
}
GenericInDelegate
using System;
namespace GenericInDelegate
{
delegate T NumberChange(T n);//Event,interface
class Program
{
static int num = 0;
public static int AddNum(int p)
{
num += p;
return num;
}
public static int MultiNum(int p)
{
num *= p;
return num;
}
static void Main(string[] args)
{
NumberChange nc1 = new NumberChange(AddNum);
NumberChange nc2 = new NumberChange(MultiNum);
nc1(25);
Console.WriteLine(num);
nc2(5);
Console.WriteLine(num);
Console.ReadLine();
}
}
}
7.C# 的 Attribute
Attribute
#define DEBUG
using System;
using System.Diagnostics;
namespace Attribute
{
class Program
{
static void Main(string[] args)
{
MyClass.Message("In Main Function");
Function1();
Console.ReadLine();
}
//警告 1 “Attribute.Program.Function1()”已过时:“Don't user old Method”
[Obsolete("Don't user old Method")]
static void Function1()
{
MyClass.Message("In Function1");
Function2();
}
static void Function2()
{
MyClass.Message("In Function2");
}
}
public class MyClass
{
[Conditional("DEBUG")]
public static void Message(string msg)
{
Console.WriteLine(msg);
}
}
}
CreateAttribute
using System;
namespace CreateAttribute
{
class Program
{
static void Main(string[] args)
{
HelpAttribute helpAttribute;
foreach(var attr in typeof(AnyClass).GetCustomAttributes(true))
{
helpAttribute = attr as HelpAttribute;
if(helpAttribute != null)
{
Console.WriteLine("AnyClass Description:{0}",
helpAttribute.Description);
}
}
Console.ReadLine();
}
}
//AttributeUsage这个Attribute的使用范围
[AttributeUsage(AttributeTargets.Class,AllowMultiple=false,Inherited=false)]
//AllowMultiple 是否可以放置多个
//Inherited 继承的类是否继承该Attribute
public class HelpAttribute:Attribute
{
protected string description;
public HelpAttribute(string _description)
{
this.description = _description;
}
public string Description
{
get
{
return this.description;
}
}
public string Name
{
get;
set;
}
}
//value type, System.Type, object, enum,
[Help("this is a do-nothing class",Name="zilong")]
public class AnyClass
{ }
}
8.C# 的反射机制
Reflection
using System;
namespace Reflection
{
using System.Reflection;
class Program
{
static void Main(string[] args)
{
//之前的 typeof
//object.GetType();
string s = "Hello Reflection";
Type t = s.GetType();
Console.WriteLine(t.FullName);
//Type.GetType("System.String");
Type t2 = Type.GetType("System.String", false, true);
Console.WriteLine(t2.FullName);
//typeof
Type t3 = typeof(String);
Console.WriteLine(t3.FullName);
//Type 为 System.Type 抽象类不能实例化
//FullName,BaseType,IsAbstract,IsClass,IsMethod,IsArray
//GetConstructors();GetEvent();GetField();GetMember();GetProperty();
Console.WriteLine("------------------------");
//GetMethods(t);
Console.WriteLine("Jion Method:{0}", t.GetMethod("Copy"));
Console.WriteLine("------------------------");
GetMethods(t, BindingFlags.Public | BindingFlags.Instance);
//GetFields();GetPropertes(); //获得所有的属性
Console.ReadLine();
}
public static void GetMethods(Type t,BindingFlags f)
{
MethodInfo[] mi = t.GetMethods(f);
foreach(var item in mi)
{
Console.WriteLine(item.Name);
}
}
}
}
ReflectionInAssembly
using System;
using System.Reflection;
namespace ReflectionInAssembly
{
class Program
{
static void Main(string[] args)
{
Assembly objAssembly;
objAssembly = Assembly.Load("mscorlib,2.0.0.0.Neutral,b77a5c561934e089");
//late binding 推迟绑定
Type[] types = objAssembly.GetTypes();
//foreach(var item in types)
//{
// Console.WriteLine(item.FullName);
//}
objAssembly = Assembly.GetExecutingAssembly();//很重要的一句
Type t = objAssembly.GetType("ReflectionInAssembly.Car", false, true);
object obj = Activator.CreateInstance(t);
MethodInfo m1 = t.GetMethod("IsMoving");
var isMoving = (bool)m1.Invoke(obj,null);
Console.WriteLine("is Moving : {0}",isMoving);
//System.Emmit();//在运行时创建新的类型,并实例化它,运行它
Console.ReadLine();
}
}
public class Car
{
public bool IsMoving()
{
return true;
}
}
}
9.C# 的预处理指令
#define DEBUG
//#undef DEBUG
// /define:DEBUG
#define TRACE
using System;
namespace PreProcessor
{
#pragma warning disable 414,3021 //Disable #warning
[CLSCompliant(false)]
class Program
{
static void Main(string[] args)
{
#region hello zilong
//logic
//logic
#endregion
#if(DEBUG)
Console.WriteLine("Debugging is enabled");
#elif(TRACE)
Console.WriteLine("Tracing is enabled");
#else
Console.WriteLine("Debugging is not enabled");
#endif
Console.WriteLine("------------------------");
#if DEBUG
#line 200 " Special" //设置当前行数为200行
#warning DEBUG is defined
//#error I'm Error
#endif
#line default //还原文件的行数
#warning I'm not happy
Console.WriteLine("------------------------");
//文件的checksum
#pragma checksum "filename" "{guid}" "check bytes"
Console.ReadLine();
}
}
#pragma warning restore 3021 //还原#warning
[CLSCompliant(false)]
//警告 1 由于程序集没有 CLSCompliant 特性,因此“PreProcessor.D”不需要 CLSCompliant 特性
class D
{
int i = 1;
public void M()
{
}
}
}
10.C# 的正则表达式
using System;
using System.Collections.Generic;
namespace Regex
{
using System.Text.RegularExpressions;
class Program
{
static void Main(string[] args)
{
var s1 = "abc";
var pattern = "abc";
Console.WriteLine(Regex.IsMatch(s1, pattern));
RegexIsMatch();
RegexMatch();
RegexReplace();
RegexSplit();
Matches();
Groups();
Console.ReadLine();
}
private static void RegexIsMatch()
{
//Regex r = new Regex();
string[] values = { "111-22-3333", "111-2-3333" };
string pattern2 = @"^\d{3}-\d{2}-\d{4}$";
foreach (var item in values)
{
if (Regex.IsMatch(item, pattern2))
{
Console.WriteLine("{0} is valid", item);
}
else
{
Console.WriteLine("{0} is note valid", item);
}
}
}
private static void RegexMatch()
{
var input = "This is apple apple computer and iPad !";
var pattern = @"\b(\w+)\W+(\1)\b";
Match match = Regex.Match(input, pattern);
while(match.Success)
{
Console.WriteLine("Duplication {0} found",match.Groups[1].Value);
match = match.NextMatch();
}
}
private static void RegexReplace()
{
string pattern = @"\b\d+\.\d{2}\b";
string replacement = "$$$&";
string input = "Total cost : 103.64";
Console.WriteLine(Regex.Replace(input, pattern, replacement));
}
private static void RegexSplit()
{
string input = "1. Egg 2. Bread 3. Mike 4. Coffee";
string pattern = @"\b\d{1,2}\.\s";
foreach(string item in Regex.Split(input,pattern))
{
if(!string.IsNullOrEmpty(item))
{
Console.WriteLine(item);
}
}
}
private static void Matches()
{
MatchCollection matches;
List results = new List();
List matchPosition = new List();
Regex r = new Regex("abc");
matches = r.Matches("123abc4abcd");
foreach(Match match in matches)
{
Console.WriteLine("{0} found at position {1}",
match.Value, match.Index);
Console.WriteLine("{0}", match.Result("$&, hello zilong!"));
//$&表示匹配的结果
}
}
private static void Groups()
{
string input = "Born: July 28, 1989";
string pattern = @"\b(\w+)\s(\d{1,2}),\s(\d{4})\b";
Match match = Regex.Match(input, pattern);
if(match.Success)
{
for(int ctr=0;ctr
11.C# 的匿名函数
using System;
namespace Anonymous
{
class Program
{
delegate void TestDelegate(string s);
delegate int del(int i);
delegate TResult Func(TArg0 arg0);
static void M(string s)
{
Console.WriteLine(s);
}
static void Main(string[] args)
{
DelegateHistory();
StartThread();
lambda();
Console.ReadLine();
}
private static void DelegateHistory()
{
TestDelegate testDelA = new TestDelegate(M);
// C# 2.0 Anonymous Method
TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); };
// C# 3.0 lambda Expression
TestDelegate testDelC = (x) => { Console.WriteLine(x); };
testDelA("Hello. this is a delegate");
testDelB("This is a anonymous method");
testDelC("This is a lamba expression");
}
private static void StartThread()
{
System.Threading.Thread t1 = new System.Threading.Thread(
delegate()//not allow "ref out" keyword and unsafe code
{
System.Console.Write("hello, ");
System.Console.WriteLine("world!");
}
);
t1.Start();
}
public static void lambda()
{
// () => Expression
del myDelegate = x => x * x;//只有一个参数的是否可以不写括号
del myDelegate2 = (x) => { x = x + 2; return x * x; };
Func myFunc = x => x == 5;
Console.WriteLine(myFunc(10));
}
}
}
12.C# 的 LINQ
using System;
using System.Collections.Generic;
using System.Linq;
namespace Linq
{
class Program
{
static void Main(string[] args)
{
BasicConcept();
QuerySyntax();
QueryOperation();
QueryIntoAndLetKeyword();
Console.ReadLine();
}
private static void BasicConcept()
{
// Linq : language Intergarted Query
// select id,name from employee
// IEnumerable
// Linq To SQL, Linq To XML,
// Linq To DataSet, Linq To Object
int[] numbers = { 5, 10, 25, 35, 66, 77, 44, 22 };
// 1. Query Syntax
var numQuery1 = from num in numbers
where num % 2 == 0
orderby num
select num;
foreach (var i in numQuery1)
{
Console.Write(i + " ");
}
Console.WriteLine();
// 2. Method Syntax
var numQuery2 = numbers.Where(n => n % 2 == 0).OrderBy(n => n);
foreach (var i in numQuery2)
{
Console.Write(i + " ");
}
Console.WriteLine();
}
private static void QuerySyntax()
{
// 1. Data Source
// IEnumerable
int[] numbers = { 1, 22, 24, 45, 16, 75, 34 };
// 2. Query Creation
//推迟执行;
var numQuery = from num in numbers
where num % 2 == 0
orderby num
select num;
//强制执行:Count(),ToList(),ToArray()
int numCount = numQuery.Count();
numQuery.ToList();
numQuery.ToArray();
// 3. Query execution
foreach (var num in numQuery)
{
Console.Write("{0,3}", num);
}
Console.WriteLine();
}
private static void QueryOperation()
{
int[] numbers = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
var querys = from num in numbers
where num % 2 == 1 && num % 3 == 1
//where num % 2 == 1 || num % 3 == 1
orderby num descending //ascending
select num;
foreach (var item in querys)
{
Console.Write("{0,2}", item);
}
Console.WriteLine();
List customers = new List();
customers.Add(new Customer() { Name = "Jack", City = "Beijing" });
customers.Add(new Customer() { Name = "LiLei", City = "Beijing" });
customers.Add(new Customer() { Name = "WangMeiMei", City = "Shanghai" });
List employees = new List();
employees.Add(new Employee() { Name = "Jack", ID = 101 });
employees.Add(new Employee() { Name = "Emily", ID = 102 });
var customerQuery = from item in customers
group item by item.City;
foreach (var cg in customerQuery)
{
Console.WriteLine(cg.Key);
foreach (var c in cg)
{
Console.WriteLine(" {0}", c.Name);
}
}
var queryJoin = from c in customers
join e in employees on c.Name equals e.Name
select new { personName = c.Name, personID = e.ID, personCity = c.City };
foreach (var p in queryJoin)
{
Console.WriteLine("{0} {1} {2}",
p.personID, p.personName, p.personCity);
}
}
private static void QueryIntoAndLetKeyword()
{
List customers = new List();
customers.Add(new Customer() { Name = "Jack", City = "Beijing" });
customers.Add(new Customer() { Name = "LiLei", City = "Beijing" });
customers.Add(new Customer() { Name = "WangMeiMei", City = "Shanghai" });
// into let keyword
var customerQuery2 = from item in customers
group item by item.City into cusGroup
where cusGroup.Count() >= 2
select new { City = cusGroup.Key, Number = cusGroup.Count() };
foreach(var item in customerQuery2)
{
Console.WriteLine("{0} Count {1}", item.City, item.Number);
}
string[] strings = { "hello zilong", "This is Friday!","Are you Happly!"};
var stringQuery = from s in strings
let words = s.Split(' ')
from word in words
let w = word.ToUpper()
select w;
foreach(var item in stringQuery)
{
Console.WriteLine("{0}",item);
}
}
}
class Customer
{
public string Name
{
get;
set;
}
public string City
{
get;
set;
}
}
class Employee
{
public string Name
{ get; set; }
public int ID
{ get; set; }
}
}
13.C# 的扩展方法
using System;
using System.Linq;
namespace ExtensionMethod
{
public enum Grades { F = 0, E = 1, D = 2, B = 3, A = 4 };
class Program
{
static void Main(string[] args)
{
DeomLinq();
StringCount();
var g1 = Grades.A;
var g2 = Grades.D;
var g3 = Grades.F;
Console.WriteLine(g1.IsPass());
Console.WriteLine(g2.IsPass());
Console.WriteLine(g3.IsPass());
Extension.minPass = Grades.B;
Console.WriteLine(g1.IsPass());
Console.WriteLine(g2.IsPass());
Console.WriteLine(g3.IsPass());
Console.ReadLine();
}
private static void DeomLinq()
{
int[] ints = { 12, 45, 13, 45, 63, 14, 46, 47 };
var result = ints.OrderBy(n => n);
foreach (var item in result)
{
Console.WriteLine(item);
}
}
private static void StringCount()
{
string s = "this is zilong C# tutorial!";
Console.WriteLine("Word Count is {0}.", s.WordCunt());
}
}
//扩展方法写在静态类上
public static class StringExtension
{
public static int WordCunt(this string str)
{
return str.Split(new char[] { ' ', '.', '!', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
public static class Extension
{
public static Grades minPass = Grades.D;
public static bool IsPass(this Grades grade)
{
return grade >= minPass;
}
}
}
14.C# 的初始化器
using System;
using System.Collections.Generic;
using System.Linq;
namespace Initializer
{
class Program
{
static void Main(string[] args)
{
ObjectInitializer();
IntialzerAnonymousType();
CollectionInitialzer();
Console.ReadLine();
}
private static void ObjectInitializer()
{
var student1 = new StudentName("MeiMei", "Wang");
//先调用无参的构造函数
var student2 = new StudentName() { FirstName = "MeiMei", LastName = "Wang" };
var student3 = new StudentName() { ID = 103 };
var student4 = new StudentName("Lei", "Li") { ID = 104 };
Console.WriteLine(student1);
Console.WriteLine(student2);
Console.WriteLine(student3);
Console.WriteLine(student4);
}
private static void IntialzerAnonymousType()
{
var pet = new { Age = 10, Name = "miaomiao" };
//只读,不能赋值,在Linq里用的非常多
//pet.Age = 12;
var students = new List()
{
new StudentName("Li", "li"),
new StudentName("Mei", "mei")
};
var froms = new List()
{
new StudentFrom(){FirstName="Li",City="Beijing"},
new StudentFrom(){FirstName="Wang",City="Shanghai"}
};
var joinQuery = from s in students
join f in froms on s.FirstName equals f.FirstName
select new { firstName = s.FirstName, lastName = s.LastName, city = f.City };
foreach (var item in joinQuery)
{
Console.WriteLine("firstName:{0},lastName:{1},city{2}", item.firstName, item.lastName, item.city);
}
}
private static void CollectionInitialzer()
{
var students = new List()
{
//默认的初始化器
new StudentName{FirstName="Mei",LastName="Mei",ID = 100},
new StudentName(){FirstName="Li",LastName="Li",ID = 101},
new StudentName("Li","Lei"){ID = 102},
null
};
foreach (var item in students)
{
if(item != null)
Console.WriteLine(item);
}
Dictionary studentDic =
new Dictionary
{
{111,new StudentName{FirstName="Mei",LastName="Mei",ID = 100}},
{112,new StudentName(){FirstName="Li",LastName="Li",ID = 101}},
};
foreach (var item in studentDic)
{
Console.WriteLine("key:{0},value:{1}", item.Key, item.Value);
}
}
}
public class StudentName
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int ID { get; set; }
public StudentName()
{ }
public StudentName(string _fristName, string _lastName)
{
FirstName = _fristName;
LastName = _lastName;
}
public override string ToString()
{
return FirstName + " " + ID;
}
}
public class StudentFrom
{
public string FirstName { get; set; }
public string City { get; set; }
}
}