培训实习生-----面向对象基础

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值