对口高考C#知识点精讲7.1.1: 字段类

本节知识点:

  • OOP是什么?
  • 类是什么?
  • OOP的基本思想是什么
  • 声明类的关键字是什么
  • 类的命名规则是什么?请举一个类声明的例子
  • 声明空类的基础语法是什么
  • 类的访问修饰符是什么
  • 最常见的声明类的位置是什么
  • 类的四大基本成员是什么?

一、OOP是什么

OOP 就是面向对象编程。它的全拼是 Object Oriented Programming。

面向对象是一种以“对象”为中心编写代码的思想。


补充说明:

  • Object - 对象:程序中的基本实体(虚拟实体),将数据操作数据的方法捆绑在一起。
  • Oriented - 面向 / 导向:表示这种编程方法是围绕“对象”这个概念来进行的。
  • Programming - 编程:指软件开发的过程。

面向对象编程是一种编程范式(Programming Paradigm),其核心思想是使用 “类和对象” 来设计程序。

“范式”就是“解决问题的哲学”、“编程的世界观”、“编程的思维方式”。

如果建造一座房子,西方人和东方人对这件事的看法差异很大。欧式古典是一种范式,中式古典也是一种范式。编程范式也是如此。它不仅仅是语法技巧,更是一套如何理解程序、如何组织代码的思想和规则。如果说编程的语法是“术”,那么面向对象编程就是“道”。

  • 面向过程:认为程序是一系线性执行的步骤。思维重心是“第一步做什么,第二步做什么”。
  • 面向对象:认为程序是一些相互作用的对象。每个对象都有自己的属性和方法。思维重心是“谁来做,它有什么,能做什么”。

简单来说,OOP 就是一种以“对象”为中心来组织代码的编程方法论。

二、类是什么?

定义:类是创建对象的模板,定义了同类对象的共同的特征和行为。


补充说明:
类是创建对象的模板

  • 类只是一个模板、一个定义。它自己什么都不做,也不占地方。
  • 模板是用来创建对象的。
  • 类是一种抽象的概念,是对象的统称。比如:人类,鸟类
  • 对象是具体的"实物"。比如:张三、李四;喜鹊、燕子

类定义了某类事物共同的特征和行为

  • 特征:它有什么(静态属性)。(比如:人的特征:五官特征、皮肤颜色、毛发颜色等)
  • 行为:它能做什么(动态行为)。(比如: 直立行走、 嘴巴唱歌等)

三、OOP的基本思想是什么

类是面向对象编程的核心,所以面向对象编程的基本思想就是:

  • 将数据和方法封装到对象中
  • 通过类来定义和管理对象

四、声明类的完整语法是什么(语法)

完整语法

[attributes] [access-modifiers] [class-modifiers] class ClassName
[type-parameters] [constraints] [: base-class] [, interfaces]
{
    // 类成员(字段、属性、方法、构造函数等)
}

完整语法对于初学者过于复杂,没关系,分步骤,一步一步“蚕食”它就可以了。

五、声明空类(语法)

无论类的结构多么复杂,任何一个类的都离不开如下基础定义:

基础语法:声明一个不包含任何成员的空类的

[访问修饰符] class ClassName
{
    
}
  • class 关键字:声明类的核心关键字。只要声明类,就要使用class关键字。
  • 类名:使用一个名字表示类。类名遵循帕斯卡(PascalCase)命名规范。无论类名由几个单词组成,每个单词的首字母要大写。

提示:在C#中声明类时,类本身就是一种数据类型,不需要额外指定数据类型。类没有返回值,所以也无需像方法那样,指定返回值类型。

基础语法:创建一个对象

ClassName 对象名 = new ClassName();

六、类的访问修饰符是什么

用途:控制类的可见性。即从哪些位置可以访问类。

访问修饰符 可用于顶级类 可用于嵌套类 描述
public 无访问限制
internal 同一程序集内可访问
private 仅包含类内可访问
protected 包含类及派生类可访问
protected internal 同一程序集或派生类可访问
private protected 同一程序集中的派生类可访问

public(顶级类修饰符)

  • public表示无访问限制,在任何位置都可访问类。即从外部项目也能访问当前类。
  • public 属于顶级类修饰符。是最常用的类访问修饰符。

示例

LessonClassDeclare1/Program.cs

namespace LessonClassDeclare1;
using LessonClassDeclare2;

class Program
{
    static void Main(string[] args)
    {
        PublicClass publicObj = new PublicClass();
    }
}

LessonClassDeclare2/Program.cs

namespace LessonClassDeclare2;

class Program
{
    static void Main(string[] args)
    {
        PublicClass publicObj = new PublicClass();
    }
}

public class PublicClass
{

}

internal class InternalClass
{
    PublicClass publicObj = new PublicClass();
}

internal(顶级类修饰符)

  • internal表示只能在定义它的项目(程序集)内部访问。
  • internal属于顶级类修饰符。是类的默认访问修饰符。

示例

LessonClassDeclare1/Program.cs

namespace LessonClassDeclare1;
using LessonClassDeclare2;

class Program
{
    static void Main(string[] args)
    {
        //public修饰符可以访问,不报错
        PublicClass publicObj = new PublicClass();
        //internal修饰符不可以访问,报错
        InternalClass internalObj = new InternalClass();
    }
}

LessonClassDeclare2/Program.cs

namespace LessonClassDeclare2;

class Program
{
    static void Main(string[] args)
    {
        //可以访问
        InternalClass internalObj = new InternalClass();
    }
}

public class PublicClass
{
    //可以访问
    InternalClass internalObj = new InternalClass();
}

internal class InternalClass
{
    
}

private(嵌套类修饰符)

  • private表示只能在父类(包含类)内部访问。
  • private修饰符只能作为嵌套类出现。
  • C#编译器会根据类的声明位置应用默认规则internalprivate
    • 在命名空间内声明的类,默认 internal
    • 在另一个类内部声明的类,默认 private

示例

namespace LessonClassDeclare2;

class Program
{
    static void Main(string[] args)
    {
        // 不可以在包含类外部使用
        InnerPrivateClass inner = new InnerPrivateClass();
    }
}

public class PublicClass
{
    // 不可以在包含类外部使用
    InnerPrivateClass inner = new InnerPrivateClass();
}

internal class InternalClass
{
    
}

public class OuterClass
{
    private class InnerPrivateClass
    {
        // 这个类只能在 OuterClass 内部访问
    }
    
    public void UsePrivateClass()
    {
        // 可以在包含类内部使用
        InnerPrivateClass inner = new InnerPrivateClass();
    }
}

protected(嵌套类修饰符)

protected internal(嵌套类修饰符)

七、声明类的位置

在 C# 中,类可以在多个不同的位置声明,每个位置都有其特定的用途和限制。声明类的位置:

  • 命名空间内(最常见、最普遍)
  • 另一个类的内部(嵌套类)
  • struct结构体内
  • 全局命名空间内
  • 接口内
  • 方法内

命名空间内(最常见的位置)

namespace MyCompany.MyApplication
{
    // 顶级类 - 最常见的声明位置
    public class Customer
    {
        public string Name { get; set; }
        public string Email { get; set; }
    }
    
    // 另一个顶级类
    internal class DataAccess
    {
        public void SaveData() { /* ... */ }
    }
}

特点

  • 最常用的声明方式
  • 可以组织相关的类在一起
  • 避免命名冲突

注意:尽量避免在全局命名空间中声明类,容易引起命名冲突。

八、类的四大基本成员是什么

一个典型的类,通常至少包含四个成员:

  • 字段:类中的变量,用于存储数据。
  • 属性:是对字段的封装,封装的目的是为了安全的向外展示字段数据。
  • 方法:用于定义对象行为。
  • 构造函数:用于初始化对象。

九、声明字段类(语法)

在这里,字段类指仅包含字段成员的类。

基本语法:声明字段类

[访问修饰符] class ClassName
{
    // 字段声明的基本语法
    [访问修饰符] 数据类型 字段名;
}

字段名

  1. 标识符
  2. 私有字段,推荐使用驼峰式(camelCase)或下划线前缀( _camelCase)
  3. 公共字段,推荐使用帕斯科命名法;
  4. Unicode字符可行不推荐

数据类型

任何有效的C#类型都可以用来声明字段。如:intcharboolstringDateTimeint[]string[],甚至ClassName等。

示例

    // 字符串类型字段
    public string Name;
    
    // 整数类型字段
    private int age;
    
    // 浮点数类型字段
    internal double height;
    
    // 布尔类型字段
    protected bool isActive;
    
    // 日期时间类型字段
    public DateTime birthDate;
    
    // 自定义类型字段
    private Address address;

     // 字符串
    public string firstName;
    private string _lastName;
    
    // 数组
    public int[] numbers;
    private string[] names;
    
    // 集合
    public List<string> items;
    private Dictionary<int, string> keyValuePairs;
    
    // 自定义类
    public Address homeAddress;
    private Person _owner;
    
    // 对象类型
    internal object anyData;

字段访问修饰符

用途:字段的访问修饰符控制着字段的可访问性。

访问修饰符 可用于字段 描述 使用示例
public 任何地方都可以访问(同类) public int Score;
internal 同一程序集内可访问 (同类) internal string InternalData;
private 仅当前类内可访问(默认) private string _name;
protected 当前类及派生类可访问 protected int BaseValue;
protected internal 同一程序集或派生类可访问 protected internal string SharedData;
private protected 同一程序集中的派生类可访问 private protected int InternalSecret;

字段的访问修饰符比类的修饰符更加灵活,所有6种修饰符都可以在字段上使用,没有顶级/嵌套的限制。

示例

public class ExampleClass
{
    // ✅ 所有6种访问修饰符都可以用于字段
    
    // 1. public - 无限制访问
    public string PublicField = "任何人都可以访问";
    
    // 2. internal - 程序集内访问
    internal int InternalField = 100;
    
    // 3. private - 仅当前类内访问(默认)
    private string _privateField = "只有ExampleClass可以访问";
    
    // 4. protected - 当前类及派生类访问
    protected double ProtectedField = 3.14;
    
    // 5. protected internal - 程序集内或派生类访问
    protected internal bool ProtectedInternalField = true;
    
    // 6. private protected - 程序集中的派生类访问
    private protected DateTime PrivateProtectedField = DateTime.Now;
    
    public void TestAccess()
    {
        // ✅ 在类内部可以访问所有字段
        Console.WriteLine(PublicField);
        Console.WriteLine(InternalField);
        Console.WriteLine(_privateField);
        Console.WriteLine(ProtectedField);
        Console.WriteLine(ProtectedInternalField);
        Console.WriteLine(PrivateProtectedField);
    }
}

示例: 声明一个学生类(Student),记录学生信息

  • 姓名
  • 年龄
namespace LessonClass
{
    class Student
    {
        // 定义字段存储学生信息  
        public string Name;     // string 是数据类型
        public int Age;         // int 是数据类型
        public DateTime BirthDate;  // DateTime 是数据类型
    }
    class Program
    {
        static void Main( )
        {
            Student student = new Student();
            student.name = "张三";
            student.age = -5;
        }
    } 
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容