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、类与结构的区别
结构不具备类中的所有功能,如封装、继承、多态。并且结构是面向过程的,类是面向对象的。