`
jiagou
  • 浏览: 2532687 次
文章分类
社区版块
存档分类
最新评论

C#VS面向对象基础(二)

 
阅读更多

这里我们接着上一篇博客,继续学习用C#实现面向对象中的概念。这里学习下边几个,当然我们还是通过动物比赛的例子。

多态:表示不同的对象可以执行相同的动作,但是通过它们自己的实现代码来执行。这里需要将父类将该成员声明为虚拟的,而且用到了方法重写(override).

抽象类:用abstract声明抽象类,注意抽象类不能实例化,抽象方法必须被子类重写。

接口:是把隐式公共方法和属性组合起来,以封装特定的功能的一个集合,一旦类实现了接口,就可以支持接口所指定的所有属性好成员。一个类可以支持多个接口,多个类也可以支持相同的接口。

集合:是优于数组,.NET Framework提供了用于数据存储和检索的专用类。集合随着我们向里边添加元素而自动增加,自动调节大小。提供了对堆栈,队列和哈希表的支持。

泛型:具有占位符(即参数类型)的类,结构,接口和方法。和集合紧密联系,泛型集合可以获得类型安全的直接优点。也就是说类型固定了。

下边我们通过这个例子来理解上边的概念:

定义类和接口的代码:

    abstract class Animal//利用关键字abstract定义了一个抽象类
    {
        protected string name = "";
        public Animal(string name)
        {
            this.name = name;
        }
        public Animal()
        {
            this.name = "无名";
        }

        protected int shoutNum = 6;//叫声的次数
        public int ShoutNum
        {
            get
            {
                return shoutNum;
            }
            set
            {
                shoutNum = value; 
            }
        }


        public string shout()//叫声发出的代码
        {
            string result = "";
            for (int i = 0; i < shoutNum; i++) 
                result += getshoutsound() + ", ";//调用了getshoutsound的虚方法
                return "我的名字叫"+ name + ""+result ;
 
        }
        protected virtual string getshoutsound()//修饰符virtual表示此方法为虚方法,可以被子类重写
        {
            return "";
        }
    }

    
    //定义不同的子类,来实现父类,其实就是多态的很好体现
    class Cat:Animal //子类猫
    {
        public Cat():base()
        {}
        public Cat (string name):base (name)
        {}
        protected override string getshoutsound()
        {
            return"喵";
        }
    }


    class Dog : Animal//子类狗
    {
        public Dog()
            : base()
        { }
        public Dog(string name)
            : base(name)
        { }
        protected override string getshoutsound()
        {
            return "喵";
        }
    }


    class Cattle : Animal//子类牛
    {
        public Cattle()
            : base()
        { }
        public Cattle(string name)
            : base(name)
        { }
        protected override string getshoutsound()
        {
            return "哞";
        }
    }


    class sheep:Animal//子类羊
    {
        public sheep ():base()
        {}
        public sheep(string name)
            : base(name)
        { }
        protected override string getshoutsound()
        {
           return "咩";
        }
    }


    interface Ichange//定义了一个接口
    {
        string changething(string thing);
    }


    class Machinecat : Cat, Ichange//定义了个机器猫,继承父类猫,并使用了接口Ichange
    {
        public Machinecat()
            : base()
        { }
        public Machinecat(string name)
            : base(name)
        { }
        public string changething(string thing)
        {
            return base.shout ()+ "我有万能口袋,我可以变出:" + thing;
        }
    }


下边是客户端的代码:

        //private Animal[] arrayAnimal;//声明一个动物数组
        //集合的使用
       IList<Animal> arrayAnimal;//声明一个泛型集合变量,用接口Ilist,注意Ilist<Animal>表示此集合变量只能接受Animal类型

        //猫叫的按钮事件
        private void button1_Click(object sender, EventArgs e)
        {
            Cat cat = new Cat("咪咪"); //类的实例化
            cat.ShoutNum = 7;

            MessageBox.Show(cat.shout());
        }
        //狗叫的按钮事件
        private void button2_Click(object sender, EventArgs e)
        {
            Dog dog = new Dog("旺财");//这里只是简单的调用方法,即可实现目的,体现了封装的特性
            dog.ShoutNum = 6;
            MessageBox.Show(dog.shout());
        }
        //动物报名的按钮
        private void button3_Click(object sender, EventArgs e)//动物报名按钮,
        {
            //arrayAnimal = new Animal[5];//实例化最多可以可报名5个的动物数组对象
            arrayAnimal = new List<Animal> ();//实例化List对象
            arrayAnimal.Add(new Cat ("小花"));//报名分别是猫和狗
            arrayAnimal.Add( new Dog("阿毛"));
            arrayAnimal.Add ( new Dog("小黑"));
            arrayAnimal.Add(new Cat("娇娇"));
            arrayAnimal.Add( new Cat("咪咪"));
    
            MessageBox.Show(arrayAnimal.Count.ToString());//打印出我们添加的个数

            arrayAnimal.RemoveAt(1);//这里还可以删除我们多添加的。

        }
        //让报名的所有动物进行叫声比赛
        private void button4_Click(object sender, EventArgs e)
        {
            foreach (Animal item in arrayAnimal)//遍历整个数组,让他们一次实施shout的方法
            {
                MessageBox.Show(item.shout());
            }

        }
        //叮当猫变出东西的事件代码
        private void button5_Click(object sender, EventArgs e)
        {
            Machinecat mcat = new Machinecat("叮当");//实例化机器猫
            Machinecat mcat1 = new Machinecat("叮当2");

            Ichange[] array = new Ichange[2];//声明一个接口数组,将两个实例赋值给数组
            array[0] = mcat;
            array [1]=mcat1;

            MessageBox.Show(array[0].changething("各种各样的东西!"));//利用多态性,实现不同的changething
            MessageBox .Show (array[1].changething ("好多好多东西哈!"));
        }

这个学习也是非常基础的,学习设计模式的基础!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics