C#核心(3)类中的成员变量和访问修饰符

前言

我们在前面已经了解到我们核心部分最重要的类的概念,并且进行了较为简单的功能撰写,相信你对类肯定有一些印象了,所以今天我们来细讲一些类中的知识点。

希望有助于你更深入了解面向对象编程的设计。

成员变量

在C#中,成员变量是一个类中定义的变量,用于存储对象的属性和状态。它可以在类的任何成员方法内部使用,并且可以在整个类的范围内访问。

它有一些你要遵守的基本规则:

规则

  1. 申明必须在类语句块中
  2. 是用来描述对象的特征
  3. 可以是任意变量类型
  4. 数量不做限制
  5. 是否赋值根据需求来定

例子

下面是一个人的类的声明,博主尽量将所有你能想到的数据类型都放进去了,另外提示,数组也是可以存进类中当成员变量的,比如partner,可以不是一个。

csharp 复制代码
using System;

namespace PersonNamespace
{
    // 枚举
    enum Gender
    {
        Male,
        Female
    }

    // 结构体
    struct Address
    {
        public string Street;
        public string City;
    }

    // 其他类
    class Job
    {
        public string Title;
        public int Salary;
    }

    // 人的类
    class Person
    {
        // 成员变量
        private string name;
        private int age;
        private Gender gender;
        private Address address;
        private Job job;
        private Person partner;//默认为空,如果要在类中声明一个和自己相同类型的成员变量时,不能初始化

        // 构造函数
        public Person(string name, int age, Gender gender, Address address, Job job)
        {
            this.name = name;
            this.age = age;
            this.gender = gender;
            this.address = address;
            this.job = job;
        }

        // 其他方法
        public void DisplayInformation()
        {
            Console.WriteLine("Name: " + name);
            Console.WriteLine("Age: " + age);
            Console.WriteLine("Gender: " + gender);
            Console.WriteLine("Address: " + address.Street + ", " + address.City);
            Console.WriteLine("Job: " + job.Title + ", Salary: " + job.Salary);
        }

        // 附加的方法
        public void SetPartner(Person partner)
        {
            this.partner = partner;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // 创建一个人的实例
            Address address = new Address() { Street = "123 Main St", City = "New York" };
            Job job = new Job() { Title = "Software Engineer", Salary = 5000 };
            Person person = new Person("John", 30, Gender.Male, address, job);

            // 显示信息
            person.DisplayInformation();

            // 创建另一个人的实例
            Address address2 = new Address() { Street = "456 First St", City = "Los Angeles" };
            Job job2 = new Job() { Title = "Teacher", Salary = 3000 };
            Person person2 = new Person("Jane", 28, Gender.Female, address2, job2);

            // 设置伴侣
            person.SetPartner(person2);

            // 显示信息
            person2.DisplayInformation();

            Console.ReadLine();
        }
    }
}
 

访问修饰符

C#是一种面向对象的编程语言,其中访问修饰符用于控制类、接口、字段、属性和方法的访问级别。访问修饰符决定了在不同的上下文中可以访问和使用这些成员。

设置访问修饰符的意义在于控制成员的可访问性,通过限制成员的访问范围,可以增强代码的安全性和可维护性。以下是一些常见的用途:

  1. 封装:使用private访问修饰符可以隐藏类的内部实现细节,只对外暴露必要的接口。这样可以隐藏实现细节,保护数据的完整性和安全性。

  2. 继承:使用protected访问修饰符可以使派生类能够访问基类的受保护成员,从而实现继承和重用。

  3. 模块化开发:使用internal访问修饰符可以将相关的成员限制在同一程序集内,实现模块化和代码重用。

  4. API设计:使用public访问修饰符可以定义公共接口,方便其他开发人员使用和扩展。

总的来说,访问修饰符其实就是控制你的类中的成员变量的使用权限,具体如下:

  • public------公共的 自己(类的内部)和别人(外部)都能访问和使用
  • private------私有的 只有自己能访问和使用,其中,如果你没有给成员变量访问修饰符,默认为private。
  • protected------保护的 自己和子类(新概念,后续文章才讲解,这里你记住就行)才能访问和使用

我们将Person类简化,有以下属性和方法:

csharp 复制代码
public class Person
{
    public string Name; // 公有字段
    private int Age; // 私有字段

    public void DisplayInfo()
    {
        Console.WriteLine($"Name: {Name}, Age: {Age}");
    }

    private void IncreaseAge()
    {
        Age++;
    }
}

在这个例子中,我们使用了两种访问修饰符:公有(public)和私有(private),因为保护(protected)需要子类才能展示,这个就请读者自行下去进行尝试了。

对于属性和方法来说,公有访问修饰符允许从类的外部访问。在Person类中,Name属性和DisplayInfo方法都有公有访问修饰符。这意味着我们可以在类的外部通过创建Person对象来访问和修改Name属性,并调用DisplayInfo方法。

csharp 复制代码
Person person = new Person();
person.Name = "John";
person.DisplayInfo(); // 输出:Name: John, Age: 0

私有访问修饰符限制了只有在类的内部才能访问。在Person类中,Age字段和IncreaseAge方法都有私有访问修饰符。这意味着我们无法在类的外部直接访问和修改Age字段,也无法调用IncreaseAge方法。

csharp 复制代码
Person person = new Person();
person.Age = 30; // 编译错误:'Person.Age' is inaccessible due to its protection level

person.IncreaseAge(); // 编译错误:'Person.IncreaseAge' is inaccessible due to its protection level

在未来的游戏开发中,其实有些变量我们是不希望被拿来到处改来改去的(会引起变量引用混乱),所以我们有时候就要通过这些访问修饰符加以修饰控制。

这也是我们在写代码中需要协作的规范,这个需要你和伙伴们进行更多的商量。

成员变量的使用和初始值

初始值

  • 值类型:数字类型默认0,bool类型默认false(0)
  • 引用类型:null

介绍一种看默认值的方法:

cs 复制代码
Console.Writeline(default(int);

在上诉例子中,你也可以看到,其实类中的成员变量的使用和结构体类似,这里就不做过多的讲解了。

总结

至此,我们就学完了关于c#成员变量和访问修饰符相关的知识点,希望你能感受其中设计的美感,然后继续努力踏实学习。

请期待我的下一篇博客!

相关推荐
代码小鑫4 分钟前
A031-基于SpringBoot的健身房管理系统设计与实现
java·开发语言·数据库·spring boot·后端
五味香12 分钟前
Linux学习,ip 命令
linux·服务器·c语言·开发语言·git·学习·tcp/ip
欧阳枫落18 分钟前
python 2小时学会八股文-数据结构
开发语言·数据结构·python
何曾参静谧25 分钟前
「QT」文件类 之 QTextStream 文本流类
开发语言·qt
monkey_meng29 分钟前
【Rust类型驱动开发 Type Driven Development】
开发语言·后端·rust
落落落sss37 分钟前
MQ集群
java·服务器·开发语言·后端·elasticsearch·adb·ruby
2401_853275731 小时前
ArrayList 源码分析
java·开发语言
zyx没烦恼1 小时前
【STL】set,multiset,map,multimap的介绍以及使用
开发语言·c++
lb36363636361 小时前
整数储存形式(c基础)
c语言·开发语言
feifeikon1 小时前
Python Day5 进阶语法(列表表达式/三元/断言/with-as/异常捕获/字符串方法/lambda函数
开发语言·python