C#基础(11)——面向过程、面向对象、类中方法

来源:互联网 发布:java 字符串相等 编辑:程序博客网 时间:2024/06/05 22:21

1、面向过程

面向的是过程,强调的是完成这件事的动作,比如把大象塞进冰箱里:打开冰箱——把大象塞进去——关闭冰箱门

2、面向对象

采用被动语态,如:
- 冰箱可以被打开;
- 大象可以被塞进去;
- 冰箱可以被关上;
调用一种方法,就可以完成一件事,不需要了解具体的过程。

3、类

类是一个模子,确定了对象的特征(属性)和行为(方法)。类是不占内存的,而对象是占内存的。像系统自有的string也是一个类,只不过我们这里是自定义的一个类。
这里写图片描述

[public] class 类名{    字段;//像struct存储字段    属性;    方法;}

添加类的方法有两种,右击解决方案,可以选择新建项或者添加类,当夸项目调用时,必须加public。
这里写图片描述

4、类中方法有无static区别

写好一个类,需要创建类的对象,创建过程称为对象实例化,用new,使用static是一种静态方法,不使用是非静态方法。在非静态类中,既可以有静态成员,也可以有非静态成员(实例成员,如字段、方法、属性)。调用非静态方法时需要实例化new一个对象,而使用静态方法时,需要[类名].[方法名]。
这里写图片描述
这里写图片描述
静态属性:
这里写图片描述
总结:
1、静态函数中只能访问静态成员,不能访问实例成员。
2、实例方法中既可以使用静态成员,也可以使用实例成员。
3、静态类不能实例化。
4、如果你要你的类当做“工具类”,即经常使用,不想要实例化,则使用静态类
5、静态类在整个项目中,资源共享,占内存的(静态存储区域),所以静态类越少越好。
6、人为划分的五大区域:堆、栈、静态存储区域、
7、不需要手动释放资源,比如C++里的.close,因为C#有GC(Garbage Collection),只有在程序全部结束时,就会释放资源。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ChuangzhiConsel{    class Program    {        static void Main(string[] args)        {            //创建对象            Person Tim = new Person();            Tim._name = "Tim";            Tim._gender = '男';            Tim._age = 25;            Console.ReadKey();        }    }}

Person类中使用static会出错:
这里写图片描述

Person类中不使用static:
这里写图片描述

this关键字

this表示当前类中的对象,输出的就是当前的。如果不加会出问题:因为要区分属性和局部变量。

查看这里

调用方法时,以前通过类名进行调用,现在只需要通过对象名:
这里写图片描述

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ChuangzhiConsel{    class Program    {        static void Main(string[] args)        {            //创建对象            Person Tim = new Person();            Tim._name = "Tim";            Tim._gender = '男';            Tim._age = 25;            Tim.PrintInformation();            Console.ReadKey();        }    }}

5、类中的属性

限定非法值,保护字段,对字段的赋值和取值进行限定。属性的本质就是两个方法,一个get,一个set。使用反编译工具查看:
这里写图片描述

记住:Fields:字段Methods:方法Properties:属性

按钮IL&bytes转为中间代码,再用c#,可以查看get和set方法:
这里写图片描述
这里写图片描述

   所以不能用上文的字段直接进行赋值,而是通过属性set进行赋值,因为可以对其进行限定。即当赋值时调用set的属性,打印输出时调用get属性,其实中间将属性值赋值给了字段,所以属性是不存值的,虽然通过属性进行。  字段要保护起来,不能使用public,使用private,不加默认就是private,只能在当前类中访问,出去了就访问不到。外界的沟通通过属性来进行。所以字段必须私有,而属性要用public修饰。

这里写图片描述

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ChuangzhiConsel{    class Program    {        static void Main(string[] args)        {            //创建对象            Person Tim = new Person();            Tim.Name = "Tim";            Tim.Gender = 's';            Tim.Age = -25;            Tim.PrintInformation();            Console.ReadKey();        }    }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ChuangzhiConsel{    public class Person    {        //字段        private string _name;        public string Name //属性        {            get { return _name; }//当输出打印时            set { _name = value; }//当给属性赋值时        }        //字段        private int _age;        public int Age //属性        {            get { return _age; }            set            {                if (value < 0 || value > 120)                {                    value = 0;                }                _age = value;            }        }        //字段        private char _gender;        public char Gender//属性        {            get            {                if (_gender != '男' && _gender != '女')//也可以在set里设置                {                    return _gender='男';                }                return _gender;            }            set { _gender = value; }        }        //方法        public void PrintInformation()        {            Console.WriteLine("我叫{0},今年{1}岁了,是一枚吃货{2}!", this.Name, this.Age, this.Gender);        }    }}

6、类与结构的区别

结构不具备类中的所有功能,如封装、继承、多态。并且结构是面向过程的,类是面向对象的。

原创粉丝点击