C#
对象是一个自包含的实体,用一组可识别的特性和行为来标识。
类就是具有相同的属性和功能的对象的抽象的集合。
实例就是一个真实的对象。而实例化就是创建对象的过程,使用new关键字来创建。
构造方法,又叫构造函数,其实就是对类进行初始化。构造方法与类同名,无返回值,无void,在new时候调用。
属性是一个方法或一对方法,但在调用它的代码看来,它是一个字段,即属性适合于以字段的方式使用方法调用的场合。
字段是存储类要满足其设计所需要的数据,字段是与类相关的变量。
private int shoutNum = 3;//声明一个内部字段,注意是private,默认叫的次数为3
public int ShoutNum
{
get //只读
{
return shoutNum; //ShortNum属性。当中有两个方法。get表示外界调用时可以得到
//shortNum的值。set表示外界可以给内部的shortNum赋值。
}
set //只写
{
shoutNum = value;
}
}
如果在类中的成员没有加修饰符,则被认为是private。
通常字段都是private, 即私有的变量,而属性都是public, 即公有的变量。那么shoutNum就是私有的字段,而ShortNUM就是公有的对外属性。
对象的继承代表了一种'is-a‘关系,如果两个对象A和B,可以描述为B是A,则表明B可以继承A。
抽象类和接口的区别
抽象类可以给出一些成员的实现,接口则不行。
抽象类的抽象成员可被子类部分实现,接口则全部实现。
一个类只能继承一个抽象类,但可实现多个接口。
第一:类是对对象的抽象;抽象类是对类的抽象;接口是对行为的抽象。
第二:如果行为跨越不同类的对象,可使用接口;对于一些相似的类对象,用继承抽象类。
第三:从设计角度上来看,抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类,而接口是根本不知子类的存在,方法如何实现还不确认,预先定义。其实可以说,抽象类是自底而上抽象出来的,而接口则是自顶向下设计出来的。
敏捷开发的思想:通过重构改善既有代码的设计。
.NET Framework提供了用于数据存储和检索的专用类,这些类统称集合。这些类提供对堆栈,队列,列表和哈希表的支持。比如ArrayList,ArrayList是命名空间System.Collections下的一部份,它是使用大小可按需动态增加的数组实现IList接口。ArrayList是什么东西都可以容纳的。但是一旦检索数据,如果类型不匹配,则会报错。所以ArrayList不是类型安全的。对于存放数值类型,比如int, string, struct的数据,用ArrayList就意味着将值类型装箱为Object对象,使用集合元素时,还需要执行拆箱操作,这就带来了很大的性能损耗。
装箱:就是把值类型打包到Object引用类型的一个实例中。比如: int i = 123; object o = (object)i; //boxing,装箱。
o = 123; i = (int)o; //unboxing 拆箱。因为要进行大量的计算,所以C#2.0后推出了泛型。
泛型是具有占位符(类型参数)的类,结构,接口和方法,这些占位符是类,结构,接口和方法所存储或使用的一个或多个类型的占位符。泛型集合需要System.Collections.Generic的命名空间。
委托与事件
public delegate void CatShoutEventHandler( ); //声明了一个委托,名称为CatShoutEventHandler. 这个委托所能代表的方法是无参数,无返回值的方法。
public event CatShoutEventHandler CatShout; //声明了一个对外公开的public事件CatShout,它的事件类型是委托CatShoutEventHandler。表明事件发生时,执行被委托的方法。
//无参数委托事件
class cat
{
private string name;
public cat(string name)
{
this.name = name;
}
public delegate void catshouteventhandler();
public event catshouteventhandler catshout;
public void shout()
{
Console.WriteLine("喵,我是{0}.", name);
if (catshout != null) //表明当执行shout时,如果catshout中有对象登记,则执行catshout()。
{
catshout();
}
}
}
class mouse
{
private string name;
public mouse(string name)
{
this.name = name;
}
public void run()
{
Console.WriteLine("老猫来了,{0}快跑!", name);
}
}
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat("Tom");
Mouse mouse1 = new Mouse("Jerry");
Mouse mouse2 = new Mouse("Jack");
//----表示将Mouse的方法Run通过实例化委托Cat.CatShoutEventHandler登记到Cat的事件CatShout当中。
cat.CatShout += new Cat.CatShoutEventHandler(mouse1.Run);
cat.CatShout += new Cat.CatShoutEventHandler(mouse2.Run);
cat.Shout();
Console.Read();
}
}
//有参数委托事件
class Cat
{
private string name;
public Cat(string name)
{
this.name = name;
}
public delegate void CatShoutEventHandler(object sender, CatShoutEventArgs args);
public event CatShoutEventHandler CatShout;
public void Shout()
{
Console.WriteLine("喵,我是{0}.", name);
if (CatShout != null)
{
CatShoutEventArgs e = new CatShoutEventArgs();
e.Name = this.name;
CatShout(this, e);
}
}
}
public class CatShoutEventArgs : EventArgs
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
class Mouse
{
private string name;
public Mouse(string name)
{
this.name = name;
}
public void Run(object sender, CatShoutEventArgs args)
{
Console.WriteLine("老猫{0}来了,{1}快跑!", args.Name, name);
}
}
}