面向对象编程

86 阅读2分钟

什么是面向对象编程? 为什么使用面向对象编程?

为了让编程更加清晰,把程序中的功能进行模块化划分,每个模块提供特定的功能,而且
每个模块都是孤立的,这种模块化编程提供了非常大的多样性,大大增加了重用代码的机
会。

类是什么东西?

类实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。
类定义了类的每个对毁(称为实例)可以包含什么数据和功能。

类的定义

类中的数据和函数称为类的成员
数据成员
函数成员
数据成员
数据成员是包含类的数据-字段,常量和事件的成员。
函数成员
函数成员提供了操作类中数据的某些功能。(方法,属性,构造方法和终结器
(析构方法),运算符,和索引器)

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";

匿名类型就是在初始化时候才根据值的类型去确定,确定之后不能修改