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

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、类与结构的区别

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何以问天涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值