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

  字段与属性.cs

  属性、方法作用范围.cs

  一加到一百.cs

  使用接口排序(2).cs

  使用接口排序(1).cs

  求质数.cs

  冒泡法排序.cs

  九九表.cs

  静态与非静态.cs

  构造函数.cs

  方法重载.cs

  多态性.cs

  递归求阶乘.cs

  打印三角形.cs

  传值调用与引用调用.cs


二、 设计模式举例

在设计模式中有一种模式叫Builder模式,其原理如下:

我们可以将Builder理解成电饭锅,给这个Builder放进去米和水,经过Builder的Build后,我们就可以取出香喷喷的米饭了。

C#中有一个类叫StringBuilder,输入必要的信息后,就可以取出对应的String。其使用方法如下:

C#设计模式(1)转载_运行库using System;

C#设计模式(1)转载_运行库using System.Text;

C#设计模式(1)转载_运行库

C#设计模式(1)转载_运行库class Exam

C#设计模式(1)转载_c#_05C#设计模式(1)转载_.net_06C#设计模式(1)转载_设计模式_07{

C#设计模式(1)转载_公共语言_08 public static void Main()

C#设计模式(1)转载_c#_09C#设计模式(1)转载_运行库_10 C#设计模式(1)转载_设计模式_07{

C#设计模式(1)转载_公共语言_08  StringBuilder sb = new StringBuilder();

C#设计模式(1)转载_公共语言_08  sb.Append('a',2);

C#设计模式(1)转载_公共语言_08  sb.Append('b',3);

C#设计模式(1)转载_公共语言_08  sb.Append('c',4);

C#设计模式(1)转载_公共语言_08  Console.WriteLine(sb.ToString()); //打印出 aabbbcccc

C#设计模式(1)转载_公共语言_08  sb.Remove(0, sb.Length); //清除sb中的所有信息

C#设计模式(1)转载_设计模式_18 }

C#设计模式(1)转载_设计模式_19}

程序执行结果为: aabbbcccc

请使用StringBuilder对以下打印三角型的程序进行改写,写出新程序。

C#设计模式(1)转载_运行库using System;

C#设计模式(1)转载_运行库public class Exam

C#设计模式(1)转载_c#_05C#设计模式(1)转载_.net_06C#设计模式(1)转载_设计模式_07{

C#设计模式(1)转载_公共语言_08 public static void Main()

C#设计模式(1)转载_c#_09C#设计模式(1)转载_运行库_10 C#设计模式(1)转载_设计模式_07{

C#设计模式(1)转载_公共语言_08  Console.Write("请输入行数:");

C#设计模式(1)转载_公共语言_08  int lines = int.Parse(Console.ReadLine());

C#设计模式(1)转载_公共语言_08  Console.WriteLine("");

C#设计模式(1)转载_公共语言_08  for(int i=1; i<=lines ; i++)

C#设计模式(1)转载_c#_09C#设计模式(1)转载_运行库_10  C#设计模式(1)转载_设计模式_07{

C#设计模式(1)转载_公共语言_08   for(int k=1; k<= lines-i; k++)

C#设计模式(1)转载_公共语言_08    Console.Write(" ");

C#设计模式(1)转载_公共语言_08   for(int j=1; j<=i*2-1; j++)

C#设计模式(1)转载_公共语言_08    Console.Write("*");

C#设计模式(1)转载_公共语言_08   Console.WriteLine("");

C#设计模式(1)转载_设计模式_18  }

C#设计模式(1)转载_设计模式_18}

C#设计模式(1)转载_设计模式_19}

答:

C#设计模式(1)转载_运行库using System;

C#设计模式(1)转载_运行库using System.Text;

C#设计模式(1)转载_运行库class Exam

C#设计模式(1)转载_c#_05C#设计模式(1)转载_.net_06C#设计模式(1)转载_设计模式_07{

C#设计模式(1)转载_公共语言_08 public static void Main()

C#设计模式(1)转载_c#_09C#设计模式(1)转载_运行库_10 C#设计模式(1)转载_设计模式_07{

C#设计模式(1)转载_公共语言_08  Console.Write("请输入行数:");

C#设计模式(1)转载_公共语言_08  int lines = int.Parse(Console.ReadLine());

C#设计模式(1)转载_公共语言_08  Console.WriteLine("");

C#设计模式(1)转载_公共语言_08

C#设计模式(1)转载_公共语言_08  StringBuilder sb = new StringBuilder();

C#设计模式(1)转载_公共语言_08

C#设计模式(1)转载_公共语言_08  for(int i=1; i<=lines ; i++)

C#设计模式(1)转载_c#_09C#设计模式(1)转载_运行库_10  C#设计模式(1)转载_设计模式_07{

C#设计模式(1)转载_公共语言_08   sb.Append(' ', lines-i);

C#设计模式(1)转载_公共语言_08   sb.Append('*', i*2-1);

C#设计模式(1)转载_公共语言_08   Console.WriteLine(sb.ToString());

C#设计模式(1)转载_公共语言_08   sb.Remove(0, sb.Length);

C#设计模式(1)转载_设计模式_18  }

C#设计模式(1)转载_设计模式_18 }

C#设计模式(1)转载_设计模式_19}


三、 先有鸡还是先有蛋?

到底是先有鸡还是先有蛋?看下面的代码:

C#设计模式(1)转载_运行库using System;

C#设计模式(1)转载_运行库

C#设计模式(1)转载_运行库class Client

C#设计模式(1)转载_c#_05C#设计模式(1)转载_.net_06C#设计模式(1)转载_设计模式_07{

C#设计模式(1)转载_公共语言_08   public static void Main ()

C#设计模式(1)转载_c#_09C#设计模式(1)转载_运行库_10   C#设计模式(1)转载_设计模式_07{

C#设计模式(1)转载_公共语言_08      Base b = new Base();

C#设计模式(1)转载_公共语言_08      Derived d = new Derived();

C#设计模式(1)转载_公共语言_08      b.d = d;

C#设计模式(1)转载_公共语言_08      Console.WriteLine(b.d.m);      

C#设计模式(1)转载_设计模式_18   }

C#设计模式(1)转载_设计模式_19}

C#设计模式(1)转载_运行库

C#设计模式(1)转载_运行库class Base

C#设计模式(1)转载_c#_05C#设计模式(1)转载_.net_06C#设计模式(1)转载_设计模式_07{

C#设计模式(1)转载_公共语言_08   public int n = 9;

C#设计模式(1)转载_公共语言_08   public Derived d;

C#设计模式(1)转载_设计模式_19}

C#设计模式(1)转载_运行库

C#设计模式(1)转载_运行库class Derived : Base

C#设计模式(1)转载_c#_05C#设计模式(1)转载_.net_06C#设计模式(1)转载_设计模式_07{

C#设计模式(1)转载_公共语言_08   public int m = 10;   

C#设计模式(1)转载_设计模式_19}

Derived继承自Base,可以说没有Base就没有Derived,可Base里面有一个成员是Derived类型。到底是先有鸡还是先有蛋?这个程序可以正常编译执行并打印结果10。


四、 大瓶子套小瓶子还是小瓶子套大瓶子?

另外一个例子:

C#设计模式(1)转载_运行库using System;

C#设计模式(1)转载_运行库

C#设计模式(1)转载_运行库class Client

C#设计模式(1)转载_c#_05C#设计模式(1)转载_.net_06C#设计模式(1)转载_设计模式_07{

C#设计模式(1)转载_公共语言_08   public static void Main ()

C#设计模式(1)转载_c#_09C#设计模式(1)转载_运行库_10   C#设计模式(1)转载_设计模式_07{

C#设计模式(1)转载_公共语言_08      A a = new A();

C#设计模式(1)转载_公共语言_08      B b = new B();

C#设计模式(1)转载_公共语言_08      a.b = b;

C#设计模式(1)转载_公共语言_08      b.a = a;

C#设计模式(1)转载_设计模式_18   }

C#设计模式(1)转载_设计模式_19}

C#设计模式(1)转载_运行库

C#设计模式(1)转载_运行库class A

C#设计模式(1)转载_c#_05C#设计模式(1)转载_.net_06C#设计模式(1)转载_设计模式_07{

C#设计模式(1)转载_公共语言_08   public B b;

C#设计模式(1)转载_设计模式_19}

C#设计模式(1)转载_运行库

C#设计模式(1)转载_运行库class B

C#设计模式(1)转载_c#_05C#设计模式(1)转载_.net_06C#设计模式(1)转载_设计模式_07{

C#设计模式(1)转载_公共语言_08   public A a; 

C#设计模式(1)转载_设计模式_19}

上面的代码似乎描述了"a包含b,b包含a"的关系,到底是大瓶子套小瓶子还是小瓶子套大瓶子呢?


五、 .net本质

关于"先有鸡还是先有蛋"的程序,系统运行后,内存结构如下:

 C#设计模式(1)转载_.net_132

由图中可以看出,根本不存在鸡与蛋的问题,而是型与值的问题以及指针引用的问题。

关于"大瓶子套小瓶子还是小瓶子套大瓶子"问题,系统运行后,内存结构如下:


C#设计模式(1)转载_运行库_133


由于是指针引用,所以也无所谓大瓶子还是小瓶子了。