什么是面向对象编程? 为什么使用面向对象编程?
为了让编程更加清晰,把程序中的功能进行模块化划分,每个模块提供特定的功能,而且
每个模块都是孤立的,这种模块化编程提供了非常大的多样性,大大增加了重用代码的机
会。
类是什么东西?
类实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。
类定义了类的每个对毁(称为实例)可以包含什么数据和功能。
类的定义
类中的数据和函数称为类的成员
数据成员
函数成员
数据成员:
数据成员是包含类的数据-字段,常量和事件的成员。
函数成员:
函数成员提供了操作类中数据的某些功能。(方法,属性,构造方法和终结器
(析构方法),运算符,和索引器)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _04_面向对象
{
class Customer
{
public string name;
public int age;
public string address;
public string createtime;
public void Show()
{
Console.WriteLine("名字:" + name);
Console.WriteLine("地址:" + address);
Console.WriteLine("年龄:" + age);
Console.WriteLine("创建时间:" + createtime);
}
}
struct CustomerStruct
{
public string name;
public int age;
public string address;
public string createtime;
public void Show()
{
Console.WriteLine("名字:" + name);
Console.WriteLine("地址:" + address);
Console.WriteLine("年龄:" + age);
Console.WriteLine("创建时间:" + createtime);
}
}
}
实例化对象
using System;
namespace _04_面向对象
{
class Program
{
static void Main(string[] args)
{
//利用类创建对象,c1就是对象名
Customer c1 = new Customer(); // 如果没有new,则不能用
//Customer c2;//声明对象
//c2 = new Customer();//实例化一个对象
c1.name = "siki";
c1.address = "北京";
c1.age = 20;
c1.createtime = "2021年";
c1.Show();
}
}
}
空指针不能用
Customer c1 = null;
c1.name = "sss";//空指针异常
构造函数
写了带参的构造函数,系统默认给的无参的就没了,需要自己再给个无参的构造函数
使用private设置数据成员,可以保护数据安全,也可以校验数据合法,比如用SetAge方法设置年龄,可以在函数体里面判断调用时设置的参数是否大于0
属性
Get、Set方法的简化版本,可以单独控制Get、Set的访问权限,设置只读或只写
class Customer
{
private string name;
private int age;
private string address;
private string createtime;
public int Age
{
get
{
return age;
}
set
{
age = value;
}
}
}
static void Main(string[] args)
{
Customer customer = new Customer();
customer.Age = 22;
Console.WriteLine(customer.Age);
}
另外一种写法
public int Age
{
get; set;
}
如果没有定义数据成员age ,如没有private int age;使用public int Age {get; set;}会自动创建private int age成员,在类内只能用Age当做数据成员使用
匿名类型
int age = 12;
var age2 = 22;
age2 = 24;
//age2 = "221";会报错
var name = "siki";
匿名类型就是在初始化时候才根据值的类型去确定,确定之后不能修改