C# 类的初步认识

基础语法

[访问修饰符][修饰符] class 类名{
    字段;
    属性;
    方法;
}

实例化一个对象

classStudy myInfo = new classStudy(); // 生成一个对象
myInfo.Age = 18; // 设置字段
myInfo.Name = "lddragon";
myInfo.GetNameAndAge(); // 使用对象方法

1 修饰符

1 类的访问修饰符主要有两个,即 internal public,如果省略了访问修饰符,即为 internal

2 用 internal 或者不写时代表只能在当前项目中访问类;public 则代表可以在任何项目中访问

类中成员的访问修饰符有 4 个,具体用法如下。

1 public

成员可以被任何代码访问。

2 private

成员仅能被同一个类中的代码访问,如果在类成员前未使用任何访问修饰 符,则默认为private

3 internal

成员仅能被同一个项目中的代码访问。

4 protected

成员只能由类或派生类中的代码访问。派生类是在继承中涉及的,将在后面详细介绍。

2 字段

1 字段的定义与前面介绍的变量和常量的定义类似,只是在变量或常量前面可以加上访问修饰符、修饰符。

2 在修饰字段时通常用两个修饰符,即readonly (只读)和static (静态的)。

​ 使用 readonly 修饰字段意味着只能读取该字段的值而不能给字段赋值。

​ 使用 static 修饰的字段是静态字段,可以直接通过类名访问该字段。

private int id;                         //定义私有的整型字段 id
public readonly string name;            //定义公有的只读字符串类型字段 name
internal static int age;                //定义内部的静态的整型字段 age
private const string major = "计算机";  //定义私有的字符串类型常量 major

字段在类中定义完成后,在类加载时,会自动为字段赋值,不同数据类型的字段默认值不同, 如下表所示。

数据类型 默认值
整数类型 0
浮点型 0
字符串类型 空值
字符型 a
布尔型 False
其他引用类型 空值

3 方法的定义

定义

访问修饰符    修饰符    返回值类型    方法名(参数列表)
{
    语句块;
}

1) 访问修饰符

所有类成员访问修饰符都可以使用,如果省略访问修饰符,默认是 private。

2) 修饰符

在定义方法时修饰符包括 virtual(虚拟的)、abstract(抽象的)、override(重写的)、static(静态的)、sealed(密封的)。override 是在类之间继承时使用的。

3) 返回值类型

用于在调用方法后得到返回结果,返回值可以是任意的数据类型,如果指定了返回值类型,必须使用 return 关键字返回一个与之类型匹配的值。如果没有指定返回值类型,必须使用 void 关键字表示没有返回值。

4) 方法名

对方法所实现功能的描述。方法名的命名是以 Pascal 命名法为规范的。

5)参数列表

在方法中允许有 0 到多个参数,如果没有指定参数也要保留参数列表的小括号。参数的定义形式是“数据类型参数名”,如果使用多个参数,多个参数之间需要用逗号隔开。

4 属性操作

class classStudy
{
    // 1 字段
    private int _age;
    private string _name;

    // 2 属性
    // 属性的存在就是为了保护字段,对字段的赋值与取值做限制
    public int Age
    {
        get { return this._age; }
        set {
            // 限制Age
            if (value<0|value>100)
            {
                value = 18;
            }
            _age = value; 
        }
    }

    private string Name
    {
        get { 
            // 限制Name
            if(this._name != 'lddragon')
            {
                return this._name = "xxx";
            }
            return this._name; 
        }
        set { _name = value; }
    }

    // 3 方法
    public void GetNameAndAge()
    {
        Console.WriteLine("我今年{0}了,我叫{1}", this.Age, this.Name);
    }
}

通过上面的实例可以看出,在定义字段属性时,属性的作用就是为字段提供 get、set 访问器,由于操作都比较类似,在 C# 语言中可以将属性的定义简化成如下写法。

public int Id{get; set;}
public string Name{get; set;}
public double Price{get; set;}

如果使用上面的方法来设置属性,则不需要先指定字段。如果要使用自动属性的方式来设置属性表示只读属性,直接省略 set 访问器即可。只读属性可以写成如下形式。

public int Id{get;}=1;

5 静态与非静态

// 静态
1.静态类不能被实例化
2.静态类中的所有都是静态的
3.静态使用 类名.方法/属性
4.类中的静态方法只能访问静态属性
// 非静态
1.非静态使用: 对象名.方法
2.类中静态和非静态都能访问

1 如果你想把你的类当成工具类:可以使用静态类

2 静态类在整个项目中是资源共享的

6 构造函数

作用: 帮助我们初始化对象(给每一个属性都依次的赋值)

构造函数是一个特殊的方法
	1.构造函数没有返回值,连void都没有
	2.构造函数的名称一定要和类名一样的
// 构造函数
public classStudy(string name, int age)
{
    // 与python中的init一样 创建对象时执行
    this.Name = name;
    this.Age = age;
}
classStudy myInfo = new classStudy("lddragon",18); // 生成一个对象

构造函数可以重载

7 关键字New

new 帮我们做了三件事
1.在内存中开辟了一块空间
2.在开辟的空间中创建对象
3.调用对象的构造函数进行初始化对象

8 this

1 代表当前类的对象

2 在类当中显示的调用本类的构造函数

// 构造函数
public classStudy(string name, int age)
{
    // 与python中的init一样 创建对象时执行
    this.Name = name;
    this.Age = age;
}

public classStudy(string name):this(name,0) // 方法重载解决带啊冗余
{
}

9 析构函数

~classStudy(){
    代码块
}
// 程序结束的时候才会执行 
// 帮助我们释放资源
吾虽浪迹,却未迷失本心
原文地址:https://www.cnblogs.com/lddragon1/p/15069222.html