You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何可在类外部访问并修改私有字段?以CancellationTokenSource为例

关于C#私有字段访问和CancellationTokenSource状态修改的疑问解答

你的代码示例如下:

using System.Threading;

namespace MyGame
{
    public class Game : Application
    {
        private readonly CancellationTokenSource _cts;

        public void Run()
        {
            RunAsync(_cts.Token).ConfigureAwait(false).GetAwaiter().GetResult();
        }

        internal static void Main(string[]? args)
        {
            var game = new Game();

            game._cts.Cancel();
            game.Run();
        }
    }
}

针对你的两个疑问解答如下:

1. 为何类的私有字段能在Main方法中被访问?

Main是Game类的内部静态成员方法,C#的访问权限规则明确:同一类中的所有成员(包括静态成员)都可以访问该类的私有成员(字段、方法等)。不管是实例成员还是静态成员,只要属于同一个类,就不受私有访问限制的约束,所以Main方法能直接访问Game实例的私有_cts字段。

2. 为何能在Main方法中修改CancellationTokenSource的状态?

你这里并没有直接修改_cts这个私有字段本身(比如执行game._cts = new CancellationTokenSource()这种赋值操作),而是通过_cts获取到了CancellationTokenSource的对象引用,然后调用了它的公共方法Cancel()。

私有字段的访问限制仅针对字段自身的读写操作,而通过字段拿到对象实例后,调用该对象的公共API是完全合法的——Cancel()是CancellationTokenSource类的公开成员,任何持有该对象引用的代码都可以调用它来修改对象内部状态。

内容的提问来源于stack exchange,提问作者Redplcs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:01:22