面向对象简记

本文详细阐述了C#中的属性与字段的概念、区别、作用和应用方式,包括如何使用属性来实现数据的安全访问、限制功能以及静态成员的初始化与访问关系。同时,介绍了静态方法、静态构造函数和静态类的概念,并探讨了结构体与类的区别,以及如何使用using语句进行资源管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

属性和字段的区别

在C#中,我们可以非常自由的、毫无限制的访问公有字段,但在一些场合中,我们可能希望限制只能给字段赋于某个范围的值、或是要求字段只能读或只能写,或是在改变字段时能改变对象的其他一些状态,这些单靠字段是无法做到的,于是就有了属性,属性中包含两个块:set和get,set块负责属性的写入工作,get块负责属性的读取工作。在两个块中都可以做一些其他操作,如在set中验证赋的值是否符合要求并决定是否进行赋值。当缺少其中一块时属性就只能读或只能写,set和get块中属性必需有一个,因为即不能读又不能写的属性是没有意义的。

class MyClass

{

Private string name;

public string Name

{

get {return Name;}

set {Name=value;}

}

}

(1)属性可以保证安全,当不在本类中使用时可以保证使用属性名可以避免

用字段的名字。

(2)属性的set和get函数可以限制字段的一些功能,以达到某种目的。

如:

private int a=0;

public int A
{
get{return this.a;}
set
{
if(value >= 0 && value <= 100)
this.a=value;
else
throw new Exception("值的范围不合法。");
}
}
(3)属性没有存储数据的功能,数据都存在字段中,所以只有修改字段的数据才能更改数据,修改属性的值没用。
 
 
 

态成员

1. (初始化) C#静态方法及属性在程序启动的时候,就全部装入内存的,而不管这些方法、属性以后有没有用到。即使是没有人再访问程序,这部分内存仍然不会释放

- 【实验证明,不需要实例化类对象,静态成员就已经被赋值】

- 【实验证明,甚至不需要访问到静态变量,它就会被赋值,只要你代码里对它有赋值操;如果没有赋值操作,int会被设为0】

- 【实验证明,不需要显示访问到对象,静态变量就会被处理。顺序为:声明时自带的赋值操作 -> 静态构造函数 -> 程序入口Main

- 总结来说,静态成员变量是在程序入口前,所有的初始赋值以完成;如果有赋值则赋值,否则给缺省值。

2. (被谁访问)可以被静态方法和非静态方法所访问

静态方法

1. 是一种特殊的成员方法,不属于类的某一个具体的实例,它属于类本身。

2. (不能访问什么)静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等

3. (能访问什么)静态成员函数仅能访问静态的数据成员,不能访问非静态的数据成员,也不能访问非静态的成员函数,这是由于静态的成员函数没有this指针。

非静态方法

1. (能访问什么)所有的静态方法,静态成员,非静态方法,非静态成员

访问关系总结

静态方法静态成员 (在程序启动时最早被赋值)非静态方法非静态成员(在创建类对象后被赋值)
静态方法YYNN
非静态方法YYYY

静态构造函数

  • 用于对静态字段、只读字段等的初始化。              
  • 添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的。      
  • 类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数 [实验看,不访问也会处理]
  • 静态构造函数是不可继承的,而且不能被直接调用。            
  • 如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项。 
  • 如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。

静态类

 

我们常常希望类只包含静态成员,且不能用于实例化对象,为此,一种简单的方法是使用静态类,而不是把类的构造函数设置为私有。静态类只能包含静态成员,不需要实例构造函数,因为按照定义,它根本不能实例化。但一个类可以有一个静态构造函数。

 

C# 通过 .NET Framework 公共语言运行库 (CLR) 自动释放用于存储不再需要的对象的内存。内存的释放具有不确定性;一旦 CLR 决定执行垃圾回收,就会释放内存。但是,通常最好尽快释放诸如文件句柄和网络连接这样的有限资源。

using 语句允许程序员指定使用资源的对象应当何时释放资源。为 using 语句提供的对象必须实现 IDisposable 接口。此接口提供了 Dispose 方法,该方法将释放此对象的资源。

可以在到达 using 语句的末尾时,或者在该语句结束之前引发了异常并且控制权离开语句块时,退出 using 语句。

可以在 using 语句中声明对象,或者在 using 语句之前声明对象

下面的示例显示用户定义类可以如何实现它自己的 Dispose 行为。注意类型必须从 IDisposable 继承

using System;

class C : IDisposable
{
    public void UseLimitedResource()
    {
        Console.WriteLine("Using limited resource...");
    }

    void IDisposable.Dispose()
    {
        Console.WriteLine("Disposing limited resource.");
    }
}

class Program
{
    static void Main()
    {
        using (C c = new C())
        {
            c.UseLimitedResource();
        }
        Console.WriteLine("Now outside using statement.");
        Console.ReadLine();
    }
}


结构体与类很相似,但是结构体是按值传递的,而类是按址传递的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值