10黑马程序员_类,属性,构造

来源:互联网 发布:遇到蛇怎么办 知乎 编辑:程序博客网 时间:2024/06/02 02:16

------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

面向对象概念

世界是由什么组成的:

   男人,女人,小孩,女博士,

程序员:对象

万物皆对象

描述行为和特征

 属性--对象具有的各种特征

买个对象的每个属性

属性的值

方法:行为,动作,执行

:类是模子,确定对象将会拥有的特征(属性)和行为(方法)

类是

类是对象的类型

Int a:

数据类型 变量名;

人类 李金博;

类和对象的区别

类是抽象的概念,仅仅是模版,比如说:”人”类

对象是一个你能够看到,摸得到的具体实体

定义类的语法:

[访问修饰符]class 类名

{

成员;

......

}

在我们自己写的类中,我们在写方法时,先不用加static

下面我们定义了一个叫person的类,这个类仅仅是人这个对象的模版.在这个模版中规定人类对象都应该有 姓名 性别 年龄属性和sayhelllo方法

 class person

    {

        public string name;

        public char sex;

        public int age;

        public void sayHello()

        {

            Console.WriteLine("我是{0},我是{1},我今年{2}岁了?",

                name, sex, age);

        }

    }

如何通过一个类来产生一个对象呢?

通过类来产生一个对象的过程叫做类的实例化

 

语法类 

    实例名=new ();

访问类的属性:

实例名.属性名

访问类的方法:

实例名.方法名();

只要是没有加static的方法或属性,必须先实例化,再通过实例名.方法名或实例名.属性来访问

static的方法或属性,可以直接通过类名.方法名或类名.属性来访问

构造类

namespace _01_类{    class person    {        public string name;        string id;        public string Id        { get { return id; }}        private char sex;        public char Sex        {            get { return sex; }            set {                if (value == '男' || value == '女')                { sex = value; }                else                { sex = '男'; }                            }        }        public int age;        private string adress;        public string Adress        {            get { return adress; }            set { adress = value; }        }               public void sayHello()        {            Console.WriteLine("我是{0},我是{1},我今年{2}岁了",                name, sex, age);        }    }}
使用类

namespace _01_类{    class Program    {        static void Main(string[] args)        {            person zsPerson = new person();            person lsPerson = new person();            zsPerson.name = "张三";            zsPerson.Sex = '男';            zsPerson.age = 18;            lsPerson.name = "李四";            lsPerson.Sex='女';            lsPerson.age=16;            Console.WriteLine(zsPerson.name);            zsPerson.sayHello();            lsPerson.sayHello();            Console.ReadKey();        }    }}


访问修饰符:c#中有4个访问修饰符

Public   :可以在任何地方被访问

Intemal   :只能在本项目中被访问

Private    :只能在本类中被访问

Preotected  :只能在本类和子类中被访问

在一个类中定义变量或方法时,没有写访问修饰符,那么默认的访问修饰符为private

属性

字段用public修饰的问题.

属性的定义.get;set;(右键,属性,重构)

属性是为了保护与之相对应的字段的.保证对字段的读取和赋值符合要求.

属性可分为:读写\只读\只写.

允许外部访问的变量一定要声明为属性.

读写属性;

具有get/set的属性叫做读写属性

只有get方法的属性称为只读属性,这种方法只能读取.不能写入

只有set方法的属性称为只写属性,这个属性只能写,不能写读(只写属性 很少用到)

当我们实例化一个类时,系统会自动对这个类的属性进行初始化:

数字类型初始化0/0.0

String类型初始化成:null

Char类型初始化成:\0


使用构造方法的好处:

1)对多个属性进行赋值时,不需要重复的写实例名.

2)可以保证用户在new一个对象的时候必须对某一个属性进行赋值

3)和第二个类似,在创建对象时,对只读属性进行初始化

当我们定义好一个类之后,如果我们没有写构造方法,那么系统会自动给我们加上一个默认的无忧参数的构造方法,在这个构造方法中什么也不做,我们也看不到

我们可以定义一个构造方法:

构造方法是一个特殊的方法,他的名字和类的名字相同,并且没有返回值,void都可以省略不写.我们一点手写一个构造方法后,系统原先默认给我们添加的那个无参的构造方法就不会再为我们添加了.

要实例化一个类必须调用它的构造方法

构造函数可以重载,也就是有多个参数不同的构造函数.

练习

构造类

namespace _02习题{    class Student    {        public Student(string name,char sex,int age,int chinese,int math, int english)        { this.name = name; this.sex = sex; this.age = age;        this.chinese = chinese; this.english = english; this.math = math;        }        string name;        public string Name        {            get { return name; }                 }        char sex;        public char Sex        {            get { return sex; }            set {                if (value == '男' || value == '女')                {                    sex = value;                }                else { sex = '男'; }                }        }        int age;        public int Age        {            get { return age; }            set {                age = value >= 0 ? value : 0;             }        }        int chinese;        public int Chinese        {            get { return chinese; }            set { chinese = value >= 0 ? value : 0; }        }        int math;        public int Math        {            get { return math; }            set { math = value >= 0 ? value : 0; }        }        int english;        public int English        {            get { return english; }            set { english = value >= 0 ? value : 0; }        }        public void sayHello()        { Console.WriteLine("我叫{0},今年{1}岁了,我是{2}同学",            name,age,sex); }        public void showScore()        { int sum = chinese + english + math;        int avg = sum / 3;            Console.WriteLine("我叫{0}我的总成绩为{1},平均成绩为{2}",                name,sum,avg);        }    }}
使用类

namespace _02习题{    class program    {        static void Main(string[] args)        {            Student zsStudent = new Student("张三",'男',18,90,95,80);            //zsStudent.Name = "张三";            //zsStudent.Sex = '男';            //zsStudent.Age = 18;            //zsStudent.Chinese = 90;            //zsStudent.Math = 95;            //zsStudent.English = 80;            Student xl = new Student("小兰",'女',16,95,85,100);            //xl.Name = "小兰";            //xl.Sex = '女';            //xl.Age = 16;            //xl.Chinese = 95;            //xl.Math = 85;            //xl.English = 100;            Console.WriteLine("下面是张三打招呼显示方法");            zsStudent.sayHello();            zsStudent.showScore();            Console.WriteLine("下面是小兰打招呼显示方法");            xl.sayHello();            xl.showScore();            Console.ReadKey();        }    }}

C#中的类图和通用类图


析构函数(*)~


params 可变参数

要想抛一个异常了,可以这样写:

throw new Exception(错误信息);


命名空间

Namespace(命名空间),用于解决类重名问题,可以看作”类的文件夹”

不在同一个命名空间下的类,不能被直接访问,要想访问别的命名空间下的类有两种方法:

1)通过using引用对方的命名空间

2)写全称.命名空间名.类名

System 根命名空间


字符串的处理

    

String:

方法:

Tolower

Toupper

Equals

属性:

Length

练习

namespace _05xiti{    class Program    {        static void Main(string[] args)        {            string scoreA = "c#";            string scoreB = "java";            if (scoreA == scoreB)            { Console.WriteLine("你们喜欢相同的课程"); }            else            { Console.WriteLine("你们喜欢不同的课程"); }            Console.ReadKey();        }    }}

------- Windows Phone 7手机开发.Net培训、期待与您交流! -------



原创粉丝点击