C#知识点简单回顾(有图有真相)
1)传值调用与引用调用
using System; class MethodCall { public static void Main() { /* * 参数类型分为 in, ref, out 三种,默认为 in。 * in 类型在子方法中修改了对应变量后,主方法中的值不会发生改变。 * ref 类型在子方法中修改了对应变量后,主方法中的值也会发生改变。 * out 主方法中对应的变量不需要初始化。 * */ int a = 1, b = 2, c; Console.WriteLine("Before Method Call : a = {0}, b = {1}, c 未赋值", a, b); AMethod(a, ref b, out c); Console.WriteLine("After Method Call : a = {0}, b = {1}, c = {2}", a, b, c); Console.Read(); } public static void AMethod(int x, ref int y, out int z) { x = 110; y = 120; z = 119; } }
效果图:
2)打印三角形
using System; public class Hello { public static void Main() { Console.Write("请输入行数:"); int lines = int.Parse(Console.ReadLine()); Console.WriteLine(""); for(int i=1; i<=lines ; i++) { for(int k=1; k<= lines-i; k++) Console.Write(" "); for(int j=1; j<=i*2+1; j++) Console.Write("*"); Console.WriteLine(""); } Console.ReadLine(); } }
效果图:
3)递归求阶乘
using System; class Factor { public static void Main() { for(int i=1; i<=10; i++) Console.WriteLine("{0} 的阶乘是 {1}",i, Factorial(i)); Console.Read(); } public static long Factorial(long n) { if(n == 1) return 1; else return n * Factorial(n-1); } }
效果图:
4)多态性
using System; class Car { public virtual void Drive() { Console.WriteLine("Drive Car"); } } class Truck : Car { public override void Drive() { Console.WriteLine("Drive Truck"); } } class Client { public static void Main() { Car c = new Truck(); c.Drive(); //多态性决定着将调用Truck的Drive方法 Console.Read(); } }
效果图:
5)方法重载
using System; class Client { public static void Main() { //重载是指方法名相同,方法的签名不同 Console.WriteLine(Add(100,50)); Console.WriteLine(Add("100","50")); Console.Read(); } public static string Add(string a, string b) { return a + " add " + b; } public static int Add(int a, int b) { return a+b; } }
效果图:
6)构造函数
using System; public class Person { public string name = ""; public int age = 0; //默认构造函数 public Person() { } //构造函数重载(1) public Person(int Age) { this.age = Age; } //构造函数重载(2) public Person(int Age, string Name) { this.age = Age; this.name = Name; } public void ShowInfo() { Console.WriteLine("姓名:" + name); Console.WriteLine("年龄:" + age); } } class Client { public static void Main() { Person p1 = new Person(); p1.ShowInfo(); Console.WriteLine("*************************"); Person p2 = new Person(25); p2.ShowInfo(); Console.WriteLine("*************************"); Person p3 = new Person(25, "爱智旮旯"); p3.ShowInfo(); Console.Read(); } }
效果图:
7)静态与非静态
using System; class StaticHello { public static void SayHello() { Console.WriteLine("Static Hello"); } } class NonStaticHello { public void SayHello() { Console.WriteLine("Non Static Hello"); } } class Client { public static void Main() { //静态方法调用应当使用 “类名.方法” StaticHello.SayHello(); //非静态方法调用应当使用 “实例名称.方法” NonStaticHello h = new NonStaticHello(); h.SayHello(); Console.Read(); } }
效果图:
8)九九表
using System; public class JiuJiuBiao { public static void Main(string[] args) { int i,j; for(i=1; i<10; i++) { for(j=1; j<10; j++) { Console.Write("{0:D1}*{1:D1}={2,2} ", i, j, i*j); } Console.WriteLine(""); } Console.ReadLine(); } }
效果图:
9)冒泡法排序
using System; class ArraySort { public static void Main() { int[] d = {10,15,21,43,17,98,2,74,63,10}; int temp; //冒泡法排序 for(int i=0; i<d.Length; i++) for(int j=i+1; j<d.Length; j++) if(d[i]<d[j]) { temp = d[i]; d[i]=d[j]; d[j]=temp; } //输出排序结果 foreach(int i in d) Console.Write("{0}, ", i); Console.Read(); } }
效果图:
10)求质数
using System; class Factor { public static void Main() { for(int i=1; i<=100; i++) if(IsPrime(i)) Console.WriteLine(i); Console.Read(); } public static bool IsPrime(int n) { for(int i=2; i<=Math.Sqrt(n); i++) if(n%i == 0) return false; return true; } }
效果图:
11)使用接口排序(1)
using System; using System.Collections; public class Person : IComparable { public int ID; public string Rank; public Person(int id, string rank) { this.ID=id; this.Rank = rank; } #region IComparable Members /* * IComparable 接口只有一个方法: CompareTo。CompareTo方法 * 只接收一个object类型的参数,这意味着它可以接收任何类 * 型的数据(object是所有类的父类),这个方法会返回一 * 整型数值,含义如下: * * 1) 小于零,当前实例(this)小于obj对象 * 2) 等于零,当前实例(this)等于obj对象 * 3) 大于零,当前实例(this)大于obj对象 * * Int32,Int16...,String,Decimal等数据类型都已经实现了IComparable接口 */ public int CompareTo(object obj) { Person p = (Person)obj; return this.ID.CompareTo(p.ID); } #endregion } class SortArrayList { static void Main(string[] args) { ArrayList list = new ArrayList(); list.Add(new Person(6, "排长")); list.Add(new Person(3, "团长")); list.Add(new Person(4, "司令")); list.Add(new Person(5, "旅长")); list.Add(new Person(7, "连长")); list.Add(new Person(1, "军长")); list.Add(new Person(2, "营长")); list.Add(new Person(8, "师长")); list.Sort(); Console.WriteLine("After Sorting"); foreach (Person person in list) { Console.WriteLine("ID: " + person.ID.ToString() + ", Rank: " + person.Rank); } } }
效果图:
12)使用接口排序(2)
using System; using System.Collections; public enum enuSortOrder {IDAsc, IDDesc, RankAsc, RankDesc} public class Person : IComparable { public static enuSortOrder intSortOrder = enuSortOrder.IDAsc; public int ID; public string Rank; public Person(int id, string rank) { this.ID=id; this.Rank = rank; } #region IComparable Members /* * IComparable 接口只有一个方法: CompareTo。CompareTo方法 * 只接收一个object类型的参数,这意味着它可以接收任何类 * 型的数据(object是所有类的父类),这个方法会返回一 * 整型数值,含义如下: * * 1) 小于零,当前实例(this)小于obj对象 * 2) 等于零,当前实例(this)等于obj对象 * 3) 大于零,当前实例(this)大于obj对象 * * Int32,Int16...,String,Decimal等数据类型都已经实现了IComparable接口 */ public int CompareTo(object obj) { Person p = (Person)obj; switch ((int)intSortOrder) { case (int)enuSortOrder.IDAsc: return this.ID.CompareTo(p.ID); case (int)enuSortOrder.IDDesc: return p.ID.CompareTo(this.ID); case (int)enuSortOrder.RankAsc: return RankCompare(this.Rank, p.Rank); case (int)enuSortOrder.RankDesc: return RankCompare(p.Rank, this.Rank); default: return this.ID.CompareTo(p.ID); } } private int RankCompare(string rank1, string rank2) { int intRank1 = ConvertRankToInt(rank1); int intRank2 = ConvertRankToInt(rank2); if(intRank1 < intRank2) return -1; else if(intRank1 == intRank2) return 0; else return 1; } private int ConvertRankToInt(string rank) { if(rank == "司令") return 8; else if(rank == "军长") return 7; else if(rank == "师长") return 6; else if(rank == "旅长") return 5; else if(rank == "团长") return 4; else if(rank == "营长") return 3; else if(rank == "连长") return 2; else return 1; } #endregion } class SortArrayList { static void Main(string[] args) { ArrayList list = new ArrayList(); list.Add(new Person(6, "排长")); list.Add(new Person(3, "团长")); list.Add(new Person(4, "司令")); list.Add(new Person(5, "旅长")); list.Add(new Person(7, "连长")); list.Add(new Person(1, "军长")); list.Add(new Person(2, "营长")); list.Add(new Person(8, "师长")); list.Sort(); Console.WriteLine("Sort By ID Asc:"); foreach (Person person in list) { Console.WriteLine("ID: " + person.ID.ToString() + ", Rank: " + person.Rank); } Console.WriteLine("----------------------------"); Console.WriteLine("Sort By ID Desc:"); Person.intSortOrder = enuSortOrder.IDDesc; list.Sort(); foreach (Person person in list) { Console.WriteLine("ID: " + person.ID.ToString() + ", Rank: " + person.Rank); } Console.WriteLine("----------------------------"); Console.WriteLine("Sort By Rank Asc:"); Person.intSortOrder = enuSortOrder.RankAsc; list.Sort(); foreach (Person person in list) { Console.WriteLine("ID: " + person.ID.ToString() + ", Rank: " + person.Rank); } Console.WriteLine("----------------------------"); Console.WriteLine("Sort By Rank Desc:"); Person.intSortOrder = enuSortOrder.RankDesc; list.Sort(); foreach (Person person in list) { Console.WriteLine("ID: " + person.ID.ToString() + ", Rank: " + person.Rank); } } }
效果图:
13)属性、方法作用范围
using System; class Base { /* * public 的可访问范围是所有类 * private 的可访问范围是当前类 * protected 的可访问范围是当前类及其子类 */ public string name = "Tom"; private double salary = 1500; protected int age = 20; public virtual void ShowInfo() { Console.WriteLine(this.name); //可以,因为name是 public 型的 Console.WriteLine(this.salary); //可以,salary是private型,在Base类中可以访问 Console.WriteLine(this.age); //可以,因为age是protected型,在子类中可以访问 } } class Derived : Base { public override void ShowInfo() { Console.WriteLine(this.name); //可以,因为name是 public 型的 //Console.WriteLine(this.salary); //不可以,salary是private型,超出Base就无法访问 Console.WriteLine(this.age); //可以,因为age是protected型,在子类中可以访问 } } class Client { public static void Main() { Base b = new Base(); Console.WriteLine(b.name); //可以,因为name是 public 型的 //Console.WriteLine(this.salary); //不可以,salary是private型,超出Base就无法访问 //Console.WriteLine(this.age); //不可以,因为age是protected型,Client不是Base的子类 Console.WriteLine("=========================="); b.ShowInfo(); Console.WriteLine("=========================="); Derived d = new Derived(); d.ShowInfo(); } }
14)一加到一百
using System; class SumToHundred { public static void Main() { int sum=0; for(int i=1; i<=100; i++) sum += i; Console.WriteLine(sum); } }
效果图:
15)字段与属性
using System; class Account { private double balance = 0; //字段 public double Balance //属性 { get { return balance; } set { balance = value;} } /*============================================================= * 我们可以通过修改get、set方法达到控制存取的目的。 * 例如: * * 1)只读属性 * public double Balance //属性 * { * get { return balance; } * set { } * } * * 2)读写控制 * public double Balance * { * get * { * if(Console.ReadLine()=="1234") * return balance; * else * return -9999999; * } * set { } * } * ============================================================= */ public void Deposit(double n) { this.balance += n; } public void WithDraw(double n) { this.balance -= n; } } class Client { public static void Main() { Account a = new Account(); a.Balance = 1000; // 可以读写属性,因为属性Balance是public型的 //a.balance = 1000; //不可以读写字段,因为字段balance是private型的 a.WithDraw(500); a.Deposit(2000); Console.WriteLine(a.Balance); } }