(二)C#基础加强系列之 “字段、属性、构造方法“篇

  实在是对不住大家,因为课程紧写博客的事儿就给耽误了,教学视屏在还在上传的过程中,等上传好了,博主会第一时间发表一篇博客通知大家去下载的,请大家耐心等待!!!还有一件事情要对大家说的是,如果没有什么特殊的事情,博主都会在周末的时候更新博客的,大家记得关注。

 

  那么,下面切入正题,大家也知道C#是一门面向对象的编程语言,接下来为大家写的就是C#中的面向对象中的字段、属性和构造方法。

  首先,我们写一个简单的Person类,教大家如何写类和使用类。我们添加一个类文件,在类文件中写下如下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _01面向对象
{
    class Person        //创建一个类文件
    {
        private string name;//为Person类定义一个name字段(姓名)

        public string Name//name字段的属性
        {
            get { return name; }
            set { name = value; }
        }
        public int age;//为Person类定义一个age字段(年龄)

        public int Age//age字段的属性
        {
            get { return age; }
            set { age = value; }
        }
        public string sex;//为Person类定义一个sex字段(性别)

        public string Sex//sex字段的属性
        {
            get { return sex; }
            set { sex = value; }
        }

        public void SayHello()//方法
        {
            Console.WriteLine("你好,我的名字叫{0},我今年{1}岁了,我是{2}", name, age, sex);
        }

    }
}

  大家有可能问属性有什么作用呢?其实啊,属性是对字段的一种封装,好处就是可以避免外界直接修改类的内部的的内容,符合面向对象的封装原则。比如当对字段进行赋值的时,可以执行一些检查,当某个字段为空时,做一些相应的处理。Ctrl+r+e 快捷键(封装字段)

 在这段代码中,我将 name 这个字段定义的修饰符是 private ,这表示外界是无法直接使用 name 这个字段的,如果外界想使用,就必须通过属性来访问,在这里,我们控制了外界的访问,也体现了面向对象中封装的好处。而其他的字段定义成 public ,那么外界就既可以直接访问的到,也可以通过属性进行访问。

再来看下面使用 Person 类的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _01面向对象
{
    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person();//想要使用类,就必须就 Person 这个对象 new 出来。
            p.Name = "Mr Lucky";//为字段赋值
            p.Age = 1000;
            p.Sex = "男生";

            p.SayHello();//调用类中的方法
            Console.ReadKey();
            

        }
    }
}

得到的结果为:

 当我们在用 p 点出来的各个字段和属性中,我们会发现,我们定义的 name 字段是不会被点出来的,点出来的只有 name 的属性 Name,而 age 和 sex 字段是可以直接点出来的,这就是修饰符的原因了,此时,想为 name 字段赋值,就必须通过属性进行相应的操作。其他的字段则可以直接使用。

那么,大家结合两端代码一起看,为大家讲解一下 get 与 set :

 

get:(读)

当外界想使用 name 这个字段的值得时候,就会调用 get ,将 name 的值返回。

 

set:(写)

当我们为把 Mr Lucky 赋值给 name 的属性 Name 时,会对应的调用 set,此时 value 中的值就是  Mr Lucky,程序将 value 中的值在赋给name字段,那么 name 这个字段中就存着 Mr Lucky 。

 

  上面为大家讲解了面向对象中的 “字段" 和 “属性”,下面就为大家讲解面向对象中的 “构造方法的概念”:

  什么是构造方法呢?

  构造方法也是一种方法,但是它具有类中其他方法所不具备的一些特性,它是一个特殊的方法。用来创建对象,并且可以在构造方法中对对象进行初始化。没有返回值,void都不需要。

 方法名:当我们自己写方法时,方法名可以自己随便命名,但是构造方法不可以。构造方法的名字必须与类名相同。也就是说,当类中的一个方法名与类名相同时,C#就认为此方法为类的构造方法。

 执行过程:类中的普通方法是在类实例化之后被调用执行的,而构造方法则是在类实例化之前执行的。也就是说,当我们创建一个实例时,会首先执行构造方法,然后进行类的实例化。

  构造函数可以有参数,在 new 对象时传递参数即可,并且构造函数可以进行重载。

 

看下面的两端关于构造方法的代码及得到的结果:

类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _02构造方法
{
    class Person
    {


        public string Name {get;set;}           //属性  姓名
        public int Age { get; set; }               //属性  年龄
       

        public Person()//构造方法   没有参数
        {
            Name = "未知";
            Age = 0;
        }

        public Person(string name)//构造方法的重载  有一个参数
        {
            Name = name;

        }

        public Person(string name, int age)//构造方法的重载  有两个参数
        {
            Name = name;
            Age = age;
        }
    }
}

 

主方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _02构造方法
{
    class Program
    {
        static void Main(string[] args)
        {
            Person p1 = new Person();
            Person p2 = new Person("Mr lucky");
            Person p3 = new Person("Mr Lucky", 1000);
            Console.WriteLine("姓名:{0}      年龄:{1}",p1.Name,p1.Age);
            Console.WriteLine("姓名:{0}      年龄:{1}", p2.Name, p2.Age);
            Console.WriteLine("姓名:{0}      年龄:{1}", p3.Name, p3.Age);
            Console.ReadKey();
           
         
        }
    }
}

得到的结果:  

  我们发现,当我们的构造方法有参数的时候。在 new 实例时,也是必须要传相应的参数的,不然就会报错。

  

 在这里要告诉大家的是:

 构造方法可有可无,视自己的情况判断是否需要写构造方法,当我们类中没有写构造方法时,它自己会有默认的构造方法的,在第一段代码中,我们没有写构造方法,但是我们来看下面的一张图:

 

  这张图是反编译第一段的 Person 类,仔细看,和我们自己写的代码多了什么?多了一个  pubilc Person();   这就是内部自己为我们添加的一个构造方法。

 

  最后,给大家写一个用面向对象实现的 简单计算器 代码如下:

 类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 面向对象计算器
{
    class Calc
    {
        private int num1;//第一个需要运算数

        public int Num1//属性
        {
            get { return num1; }
            set { num1 = value; }
        }
        private int num2;//第二个需要运算数

        public int Num2//属性
        {
            get { return num2; }
            set { num2 = value; }
        }
        private string oper;//运算符

        public string Oper
        {
            get { return oper; }
            set { oper = value; }
        }

        public int Jisuan()//对传过来的数进行运算的方法
        {
            int res;        
            switch (oper)
            {
                case "+": res = num1 + num2; break;
                case "-": res = num1 - num2; break;
                case "*": res = num1 * num2; break;
                case "/": res = num1 / num2; break;
                default: res = 0; Console.WriteLine("输入有误"); break;//如果运算符有错,直接返回结果 0;

            }
            return res;

        }

    }
}

 

主方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 面向对象计算器
{
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine("请输入第一个数字:");
                int num1 = Convert.ToInt32(Console.ReadLine());

                Console.WriteLine("请输入第二个数字:");
                int num2 = Convert.ToInt32(Console.ReadLine());

                Console.WriteLine("请输入运算符:");
                string oper = Console.ReadLine();

                Calc cal = new Calc();// new 一个实例
                cal.Num1 = num1;//将用户输入第一个数传给类
                cal.Num2 = num2;//将用户输入第二个数传给类
                cal.Oper = oper;//将用户输入的运算符传给类

                int res = cal.Jisuan();//调用类中的 Jisuan 方法  将返回的结果值给res
                Console.WriteLine("{0}{1}{2}={3}",num1,oper,num2,res);//将计算得到的结果值打印到屏幕上
                Console.ReadKey();

            }

        }
    }
}

 好了,对于基础加强系列之”面向对象之 字段、属性、构造方法“篇就写到这了,教学视屏很快就会公布的,大家耐心等待吧!!!

posted @ 2012-10-13 21:24  乐文  阅读(797)  评论(1编辑  收藏  举报