C# 面向对象程序设计复习

  字段与属性.cs
  属性、方法作用范围.cs
  一加到一百.cs
  使用接口排序(2).cs
  使用接口排序(1).cs
  求质数.cs
  冒泡法排序.cs
  九九表.cs
  静态与非静态.cs
  构造函数.cs
  方法重载.cs
  多态性.cs
  递归求阶乘.cs
  打印三角形.cs
  传值调用与引用调用.cs


 

字段与属性.cs

代码
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);
    }
}

 

属性、方法作用范围.cs

代码
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();
    }
}

 

 

一加到一百.cs

代码
using System;

class SumToHundred
{
    
public static void Main()
    {
        
int sum = 0;
        
for (int i = 1; i <= 100; i++)
            sum 
+= i;
        Console.WriteLine(sum);
    }
}

 

 

使用接口排序(2).cs

代码
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);
        }
    }
}

 

 

使用接口排序(1).cs

代码
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);
        }
    }
}

 

 

求质数.cs

代码
using System;

class Factor
{
    
public static void Main()
    {
        
for (int i = 1; i <= 100; i++)
            
if (IsPrime(i))
                Console.WriteLine(i);
    }

    
public static bool IsPrime(int n)
    {
        
for (int i = 2; i <= Math.Sqrt(n); i++)
            
if (n % i == 0)
                
return false;

        
return true;
    }
}

 


冒泡法排序.cs

代码
using System;

class ArraySort
{
    
public static void Main()
    {
        
int[] d = { 1015214317982746310 };
        
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);
    }
}

 

 

 

九九表.cs

代码
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();
    }
}

 

 

静态与非静态.cs

代码
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();
    }
}

 

 

构造函数.cs

代码
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(
"The name is : " + name);
        Console.WriteLine(
"The age is:" + age);
    }
}

class Client
{
    
public static void Main()
    {
        Person p1 
= new Person();
        p1.ShowInfo();

        Console.WriteLine(
"==========================");

        Person p2 
= new Person(30);
        p2.ShowInfo();

        Console.WriteLine(
"==========================");
        Person p3 
= new Person(30"Tom");
        p3.ShowInfo();
    }
}

 

 方法重载.cs

代码
using System;

class Client
{
    
public static void Main()
    {
        
//重载是指方法名相同,方法的签名不同
        Console.WriteLine(Add(105));
        Console.WriteLine(Add(
"10""5"));
    }

    
public static string Add(string a, string b)
    {
        
return a + " add " + b;
    }

    
public static int Add(int a, int b)
    {
        
return a + b;
    }
}

 


多态性.cs

代码
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方法
    }
}

递归求阶乘.cs
代码
using System;

class Factor
{
    
public static void Main()
    {
        
for (int i = 1; i <= 10; i++)
            Console.WriteLine(
"{0} 的阶乘是 {1}", i, Factorial(i));
    }
    
public static long Factorial(long n)
    {
        
if (n == 1)
            
return 1;
        
else
            
return n * Factorial(n - 1);
    }
}

 


打印三角形.cs
代码
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();
    }
}

 

 

传值调用与引用调用.cs

代码
using System;

class MethodCall
{
    
public static void Main() 
    {
        
/*
         * 参数类型分为 in, ref, out 三种,默认为 in。
         * in 类型在子方法中修改了对应变量后,主方法中的值不会发生改变。
         * ref 类型在子方法中修改了对应变量后,主方法中的值也会发生改变。
         * out 主方法中对应的变量不需要初始化。
         * 
         
*/        
        
int a = 3, b = 4, 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);
    }

    
public static void AMethod(int x, ref int y, out int z)
    {
        x 
= 7;
        y 
= 8;
        z 
= 9;
    }
}

 

 

 


 

posted on 2009-12-08 21:16  一粒沙  阅读(543)  评论(0编辑  收藏  举报