百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

通过C#中的属性访问器实现一个计数器,使得每次访问时计数加一

csdh11 2025-03-06 13:54 20 浏览

通过 C# 属性访问器实现计数器

属性访问器是 C# 提供的一种机制,用于封装字段的读写操作。通过在属性的 get 访问器中增加逻辑,可以在每次访问属性时执行特定操作,例如计数器的自增。


完整代码示例

using System;

class Counter
{
    private int _count; // 实际计数
    private int _accessCount; // 访问计数

    public Counter(int initialValue)
    {
        _count = initialValue;
        _accessCount = 0;
    }

    // 属性:每次访问计数器时增加访问计数
    public int Count
    {
        get
        {
            _accessCount++; // 每次访问时自增
            return _count;
        }
        set
        {
            _accessCount++; // 记录设置值的访问
            _count = value;
        }
    }

    // 只读属性:显示访问次数
    public int AccessCount
    {
        get { return _accessCount; }
    }
}

class Program
{
    static void Main(string[] args)
    {
        Counter counter = new Counter(5);

        Console.WriteLine($"初始计数值:{counter.Count}");
        Console.WriteLine($"访问计数次数:{counter.AccessCount}");

        // 访问计数器
        Console.WriteLine($"当前计数值:{counter.Count}");
        counter.Count = 10; // 设置新值
        Console.WriteLine($"新的计数值:{counter.Count}");
        Console.WriteLine($"访问计数次数:{counter.AccessCount}");
    }
}

运行结果

初始计数值:5
访问计数次数:1
当前计数值:5
新的计数值:10
访问计数次数:4

代码解析

  1. 私有字段 _count 和 _accessCount
  2. _count 存储实际的计数值。
  3. _accessCount 记录属性被访问的次数。
  4. Count 属性
  5. get 访问器:每次读取 _count 时,访问计数器自增。
  6. set 访问器:每次设置值时,也增加访问计数。
  7. AccessCount 属性
  8. 是一个只读属性,返回 _accessCount 的值,用于显示总访问次数。

扩展功能:支持多线程访问

在多线程场景下,可能需要确保访问计数是线程安全的。以下是使用 lock 来实现线程安全的版本:

class ThreadSafeCounter
{
    private int _count;
    private int _accessCount;
    private readonly object _lock = new object();

    public int Count
    {
        get
        {
            lock (_lock)
            {
                _accessCount++;
                return _count;
            }
        }
        set
        {
            lock (_lock)
            {
                _accessCount++;
                _count = value;
            }
        }
    }

    public int AccessCount
    {
        get
        {
            lock (_lock)
            {
                return _accessCount;
            }
        }
    }
}

多线程测试:

ThreadSafeCounter counter = new ThreadSafeCounter();

// 多线程操作计数器
Parallel.For(0, 100, i =>
{
    counter.Count = i;
    Console.WriteLine(counter.Count);
});

Console.WriteLine($"访问计数次数:{counter.AccessCount}");

如果需要添加更多功能(例如重置计数器或保存历史访问数据),请告诉我!

相关推荐

IDEA界面太丑??尝试一下这几个插件

前言IntelliJIDEA主要用于支持Java、Scala、Groovy等语言的开发工具,同时具备支持目前主流的技术和框架,擅长于企业应用、移动应用和Web应用的开发。IntelliJi...

小巧 Vue 页面滚动进度条组件ScrollProgress

今天给大家分享一个轻量级Vue.js全屏滚动进度条组件VueScrollProgress。vue-scroll-progress一款基于vue.js构建的页面滚动进度条组件,...

基于vue实现可视化拖拽编辑器,页面生成工具,提升前端开发效率

项目介绍基于vue实现的可视化拖拽编辑器,实现页面生成工具,提升前端开发效率。可以基层到移动端项目作为自定义json直接生成UI页面。项目特点功能特点...

优秀 vue+heyui 后端管理系统HeyUI-Admin

今天再给小伙伴们推荐一款成熟的企业中后台管理系统HEYUI-Admin。heyui-admin基于vue.js和heyui组件库构建的后台管理系统。包含基础表单/表格功能,拓展组件(图表、富文本编辑...

响应式 Vue.js 前端组件化框架Xvue-UI

今天给小伙伴们推荐一款超不错的Vue轻量级组件框架XVueUI。xvue-ui基于vue2.x构建的响应式前端组件化框架。轻量级、易于上手,提供...

《基于SpringBoot+Vue的在线视频系统设计与实现》开题报告

【计算机毕业设计案例】基于SpringBoot+Vue的在线视频系统设计与实现_哔哩哔哩_bilibili...

超好用 Vue.js 图片裁切组件Vue-ImgCutter

今天给小伙伴们分享一个超棒的Vue图片任意裁剪插件VueImgCutter。vue-img-cutter基于vue2.x构建的轻量级剪切图片组件。支持移动图像、放大缩小图片、任意移动图片、固定比...

Vue 3 进阶用法:异步组件(vue 异步组件原理)

一、代码分割一个大型前端应用,如果所有代码都放在单一文件,体积会特别大,下载时间长,白屏时间久,用户体验差。...

源码补丁神器—patch-package(源码助手怎么用)

作者:张浩一、背景vue项目中使用vue-pdf第三方插件预览pdf,书写业务代码完美运行,pdf文件内容正常预览无问题。后期需求有变,业务需求增加电子签章功能。这个时候pdf文件的内容可以显示出...

经验分享:Vue2 项目升级 Vue3 + Element Plus,借助Deepseek手动升级

Vue3出来好久了,我开发的项目还在使用Vue2框架,一般情况下不考虑升级,但是最近需要接入工作流程引擎之类的,看了下Vue2生态下操作空间不是很好,那索性尝试升级Vue3吧。一番操作下来,升级成功,...

34K Star!史上最全JavaScript资源库 awesome-javascript

34KStar!史上最全JavaScript资源宝库大揭秘引言在GitHub上,有一个备受瞩目的JavaScript资源仓库,以其全面的内容和精心的分类,成为了众多开发者的必备参考。这个拥有超过...

基于 Vue.js 磁片栅格布局组件VueGridLayout

#头条创作挑战赛#今天给大家分享一个超优秀的vue.js拖拽栅格布局插件VueGridLayout。...

6款高颜值 Vue3 PC端UI组件库(vue3开发组件库)

马上到国庆了,还没学习或者想学习vue3的小伙伴们有安排上没?这次推荐几个比较流行的VUE3UI组件库,合理利用,又或者学习借鉴都是不错的选择。1、element-pluselement-plus...

高性能 vue.js+ztree 树形组件Vue-GiantTree

今天给大家分享一款超棒的Vue海量数据渲染树形组件VueGiantTree。vue-giant-tree基于ztree封装的Vue树形组件。轻松实现大数据高性能渲染,适合海量数据渲染场景。zTr...

【推荐】2024年推荐的6款开源免费 Vue 后台管理系统模板,建议收藏

前言在现今的软件开发领域,...