马牛的C#学习(第四天)-从windows应用程序理解OOP|定义类|构造函数的执行顺序

//文件名:Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
//功能:单击一个按钮,产生一个新的按钮,单击新按钮,按钮上的文字改变
//新建windows应用程序,添加一个按钮,把代码复制到Form1.cs里面去
namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ((Button)sender).Text = "Clicked!";
            Button newButton = new Button();
            newButton.Text = "New Button";
            newButton.Click += new EventHandler(newButton_Click);   //这一句是重载运算符语法,把这个事件程序注册为click事件的监听程序。同时使用非默认的构造函数创建一个新的eventhandler对象 有点不太明白:(
            Controls.Add(newButton);
        }

        private void newButton_Click(object sender, EventArgs e)
        {
            ((Button)sender).Text = "Clicked!!";
        }
    }
}

 

//控制台程序,练习定义类
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    public abstract class MyBase
    {
        public MyBase()
        {
            Console.WriteLine("this is MyBase");
        }
    }

    internal class MyClass:MyBase
    {
        public MyClass()
        {
            Console.WriteLine("this is MyClass");
        }
    }

    public interface IMyBaseInterface
    {
        //Error 1 Interfaces cannot contain constructors 

       // public IMyBaseInterface()
       // {
       //     Console.WriteLine("this is IMyBaseInterface");
       // }
    }

    internal interface IMyBaseInterface2
    {
    }

    internal interface IMyInterface : IMyBaseInterface, IMyBaseInterface2
    {
    }

    internal sealed class MyComplexClass : MyClass, IMyInterface
    {
    }

    class class1
    {
        static void Main(string[] args)
        {
            MyComplexClass myObj = new MyComplexClass();
            Console.WriteLine(myObj.ToString());
        }       
    }
}

 

using System;
using System.Collections.Generic;
using System.Text;
//构造函数的执行顺序,可以看到,可以使用参数来决定使用哪个构造函数
namespace ConsoleApplication1
{
    public class MyBaseClass
    {
        public MyBaseClass()
        {
            Console.WriteLine("this is mybaseclass()");
        }

        public MyBaseClass(int i)
        {
            Console.WriteLine("this si mybaseclass(int i)");
        }
    }

    public class MyDerivedClass : MyBaseClass
    {
        public MyDerivedClass()
        {
            Console.WriteLine("this is Myderivedclass()");
        }

        public MyDerivedClass(int i)
        {
            Console.WriteLine("this is myderivedclass(int i)");
        }

        public MyDerivedClass(int i, int j)
        {
            Console.WriteLine("this is MyDerivedClass(int i, int j)");
        }

    }
   
    class Program
    {
        static void Main(string[] args)
        {
            //可以用参数来选择使用哪个构造函数
            MyDerivedClass myObj = new MyDerivedClass();
            Console.WriteLine("=======================================================================");
            MyDerivedClass myObj2 = new MyDerivedClass(4);
            Console.WriteLine("=======================================================================");
            MyDerivedClass myObj3 = new MyDerivedClass(4,8);
           
        }
    }

}


运行结果:

using System;
using System.Collections.Generic;
using System.Text;
//构造函数的执行顺序,可以看到,可以使用参数来决定使用哪个构造函数
//与上一个程序不同的是,这个程序改动了一个地方(已在程序中用注释标注),由运行结果我们可以清楚地看到与上一个程序的不同
namespace ConsoleApplication1
{
    public class MyBaseClass
    {
        public MyBaseClass()
        {
            Console.WriteLine("this is mybaseclass()");
        }

        public MyBaseClass(int i)
        {
            Console.WriteLine("this si mybaseclass(int i)");
        }
    }

    public class MyDerivedClass : MyBaseClass
    {
        public MyDerivedClass()
        {
            Console.WriteLine("this is Myderivedclass()");
        }

        public MyDerivedClass(int i)
        {
            Console.WriteLine("this is myderivedclass(int i)");
        }

        public MyDerivedClass(int i, int j):base(i)//此处不同。也可以用base(5)之类的,那样就只有在i等于5的时间才执行这个顺序
        {
            Console.WriteLine("this is MyDerivedClass(int i, int j)");
        }

    }
   
    class Program
    {
        static void Main(string[] args)
        {
            //可以用参数来选择使用哪个构造函数
            MyDerivedClass myObj = new MyDerivedClass();
            Console.WriteLine("=======================================================================");
            MyDerivedClass myObj2 = new MyDerivedClass(4);
            Console.WriteLine("=======================================================================");
            MyDerivedClass myObj3 = new MyDerivedClass(4,8);
           
        }
    }

}

运行结果:

 

using System;
using System.Collections.Generic;
using System.Text;
//构造函数的执行顺序。this的应用
namespace ConsoleApplication1
{
    public class MyBaseClass
    {
        public MyBaseClass()
        {
            Console.WriteLine("this is mybaseclass()");
        }

        public MyBaseClass(int i)
        {
            Console.WriteLine("this si mybaseclass(int i)");
        }
    }

    public class MyDerivedClass : MyBaseClass
    {
        public MyDerivedClass():this(1,7)     //this在这里。。。可以看到,实例化无参数的派生类时的构造函数执行顺序
        {
            Console.WriteLine("this is Myderivedclass()");
        }

        public MyDerivedClass(int i)
        {
            Console.WriteLine("this is myderivedclass(int i)");
        }

        public MyDerivedClass(int i, int j)
        {
            Console.WriteLine("this is MyDerivedClass(int i, int j)");
        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            //可以用参数来选择使用哪个构造函数
            MyDerivedClass myObj = new MyDerivedClass();
            Console.WriteLine("=======================================================================");
            MyDerivedClass myObj2 = new MyDerivedClass(4);
            Console.WriteLine("=======================================================================");
            MyDerivedClass myObj3 = new MyDerivedClass(4, 8);

        }
    }

}

运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值