C#中的方括号的语法及作用

C#索引器 索引器类似于属性。 很多时候,创建索引器与创建属性所使用的编程语言特性是一样的。 索引器使属性可以被索引:使用一个或多个参数引用的属性。 这些参数为某些值集合提供索引。 语法 可以通过变量名和方括号访问索引器。 将索引器参数放在方括号内: var item = someObject["key"]; someObject["AnotherKey"] = item; 可以看到属性语法和索引器语法之间的关系。 此类比在索引器的大部分语法规则中进行。 索引器可以使用任何有效的访问修饰符(public、protec 阅读详情

 

  C#中方括号可用于数组,索引、属性,更重要的是用于外部DLL类库的引用。

 

1. C#实现.NET组件与COM组件的互操作

    [DllImport("kernel32.dll")]这叫引入kernel32.dll这个动态连接库。
这个动态连接库里面包含了很多WindowsAPI函数,如果你想使用这面的函数,就需要这么引入。举个例子:
[DllImport("kernel32.dll")]
private static extern void 函数名(参数,[参数]);
函数名就是一个属于kernel32.dll里的一个函数。完了你就可以用那个函数了。

.NET组件中使用目前存在的COM组件
对于.NET来讲,使用COM组件就要简单一些。..NET提供了大量的类库来方便的实现同COM的相互操作,其中很重要的一个名称空间就是:System.Runtime.InteropServices。通过这个名称空间的名字我们也可以从字面上看出,"互操作服务"。System.Runtime.InteropServices这个名称空间提供了一系列的类来对COM对象进行操作。

 

需要注意的是,在调用COM组件之前,我们需要在.NET程序中引用名称空间:System.Runtime.InteropServices 。因为我们需要使用这个名称空间所提供的一个方法:DllImport。

 

例子: 内存,硬盘的利用率

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace Windows.Help
{
    public partial class SystemInfo : Form
    {
        public SystemInfo()
        {
            InitializeComponent();
        }
        [DllImport("kernel32")]
        public static extern void GetWindowsDirectory(StringBuilder WinDir, int count);
        [DllImport("kernel32")]
        public static extern void GetSystemDirectory(StringBuilder SysDir, int count);
        [DllImport("kernel32")]
        public static extern void GetSystemInfo(ref CPU_INFO cpuinfo);
        [DllImport("kernel32")]
        public static extern void GlobalMemoryStatus(ref MEMORY_INFO meminfo);
        [DllImport("kernel32")]
        public static extern void GetSystemTime(ref SYSTEMTIME_INFO stinfo);
        //定义CPU的信息结构
        [StructLayout(LayoutKind.Sequential)]
        public struct CPU_INFO
        {
            public uint dwOemId;
            public uint dwPageSize;
            public uint lpMinimumApplicationAddress;
            public uint lpMaximumApplicationAddress;
            public uint dwActiveProcessorMask;
            public uint dwNumberOfProcessors;
            public uint dwProcessorType;
            public uint dwAllocationGranularity;
            public uint dwProcessorLevel;
            public uint dwProcessorRevision;
        }
        //定义内存的信息结构
        [StructLayout(LayoutKind.Sequential)]
        public struct MEMORY_INFO
        {
            public uint dwLength;
            public uint dwMemoryLoad;
            public uint dwTotalPhys;
            public uint dwAvailPhys;
            public uint dwTotalPageFile;
            public uint dwAvailPageFile;
            public uint dwTotalVirtual;
            public uint dwAvailVirtual;
        }
        //定义系统时间的信息结构
        [StructLayout(LayoutKind.Sequential)]
        public struct SYSTEMTIME_INFO
        {
            public ushort wYear;
            public ushort wMonth;
            public ushort wDayOfWeek;
            public ushort wDay;
            public ushort wHour;
            public ushort wMinute;
            public ushort wSecond;
            public ushort wMilliseconds;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //调用GetWindowsDirectory和GetSystemDirectory函数分别取得Windows路径和系统路径
            const int nChars = 128;
            StringBuilder Buff = new StringBuilder(nChars);
            GetWindowsDirectory(Buff, nChars);
            WindowsDirectory.Text = "Windows路径:" + Buff.ToString();
            GetSystemDirectory(Buff, nChars);
            SystemDirectory.Text = " 系统路径:" + Buff.ToString();
            //调用GetSystemInfo函数获取CPU的相关信息
            CPU_INFO CpuInfo;
            CpuInfo = new CPU_INFO();
            GetSystemInfo(ref CpuInfo);
            NumberOfProcessors.Text = "本计算机中有" + CpuInfo.dwNumberOfProcessors.ToString() + "个CPU";
            ProcessorType.Text = "CPU的类型为" + CpuInfo.dwProcessorType.ToString();
            ProcessorLevel.Text = "CPU等级为" + CpuInfo.dwProcessorLevel.ToString();
            OemId.Text = "CPU的OEM ID为" + CpuInfo.dwOemId.ToString();
            PageSize.Text = "CPU中的页面大小为" + CpuInfo.dwPageSize.ToString();
            //调用GlobalMemoryStatus函数获取内存的相关信息
            MEMORY_INFO MemInfo;
            MemInfo = new MEMORY_INFO();
            GlobalMemoryStatus(ref MemInfo);
            MemoryLoad.Text = MemInfo.dwMemoryLoad.ToString() + "%的内存正在使用";
            TotalPhys.Text = "物理内存共有" + MemInfo.dwTotalPhys.ToString() + "字节";
            AvailPhys.Text = "可使用的物理内存有" + MemInfo.dwAvailPhys.ToString() + "字节";
            TotalPageFile.Text = "交换文件总大小为" + MemInfo.dwTotalPageFile.ToString() + "字节";
            AvailPageFile.Text = "尚可交换文件大小为" + MemInfo.dwAvailPageFile.ToString() + "字节";
            TotalVirtual.Text = "总虚拟内存有" + MemInfo.dwTotalVirtual.ToString() + "字节";
            AvailVirtual.Text = "未用虚拟内存有" + MemInfo.dwAvailVirtual.ToString() + "字节";
            //调用GetSystemTime函数获取系统时间信息
            SYSTEMTIME_INFO StInfo;
            StInfo = new SYSTEMTIME_INFO();
            GetSystemTime(ref StInfo);
            Date.Text = StInfo.wYear.ToString() + "年" + StInfo.wMonth.ToString() + "月" + StInfo.wDay.ToString() + "日";
            Time.Text = (StInfo.wHour + 8).ToString() + "点" + StInfo.wMinute.ToString() + "分" + StInfo.wSecond.ToString() + "秒";
        }
        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

 

 

2. 数组、索引器中的应用

 

type    类型。    
array    数组。    

indexexpr     索引表达式。    
 备注  
  数组类型是一种后跟  []  的类型:  
    
  int[]  fib;  //  fib  is  of  type  int[],  "array  of  int"  
  fib  =  new  int[100];  //  create  a  100-element  int  array  
  若要访问数组的一个元素,则用方括号括起所需元素的索引:  
    
  fib[0]  =  fib[1]  =  1;  
  for(  int  i=2;  i <100;  ++i  )  fib[i]  =  fib[i-1]  +  fib[i-2];  
  如果数组索引超出范围,则会引发异常。  
    
  不能重载数组索引运算符;但类型可以定义包含一个或多个参数的索引器和属性。索引器参数括在方括号中(就像数组索引一样),但索引器参数可声明为任何类型(与数组索引不同,数组索引必须为整数)。  
    
  例如,.NET  Framework  定义一个哈希表类型,该类型将键和任意类型的值关联在一起。  
    
  Collections.Hashtable  h  =    new  Collections.Hashtable();  
  h["a"]  =  123;  //  note:  using  a  string  as  the  index 

 

 

3. 方括号用于指定属性

 

attribute(AllowMultiple=true)]  
  public  class  Attr  {  
  }  
  可使用方括号来索引指针后面的存储位置(请参见  A.2  指针类型):  
    
  unsafe  fixed  (  int*  p  =  fib  )      //  p  points  to  fib  from  earlier  example  
  {  
        p[0]  =  p[1]  =  1;  
        for(  int  i=2;  i <100;  ++i  )  p[i]  =  p[i-1]  +  p[i-2];  
  }  
  不执行边界检查。  
    [ToolBoxItem(false)]表示不在IDE工具箱的控件集合中显示。

 

 

 

[ParseChildren(true)] 它是用来告诉解析器   页面声明语法中位于
指定标签内的内容(子标签)是否是看作该控件的属性还是当作一个子控件的标签。true  这里true 是当作子标签的意思。
ToolBoxData 的意思是当你将这个控件从tool  box   中拖放到WEBFORM中时在aspx文件的    HTML代码中添加的对该控件的定义。这里的控件是 : kj_gridview
{0}是控件的标记的前缀
就是你托这个控件到页面上 时候
他就自动添加<{0}:Div runat=server></{0}:Div>
这个{0}是你定义的 
1、[StandardParameter(“ProcessID“)]

2、[System.Web.Services.WebMethod(EnableSession=true)]

3、[Guid(“D301882E-46D1-4e83-BF15-67028B94A68D“)]

4、[Category(“Drp“)]

5、[DBDefineAttribute(“Banks.XML“)]
[Serializable]

6、[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
这些是类或方法的属性

这个在大型的软件开发中是很有用的,如项目中要用到的一个模块是通用的,我们就可以将其单独抽出来做成控件,这个时候类或是方法的属性就有用了

加上这些后使控件类在使用的时候就会有相应的列项提示等等
C#基础语法全面解析 本文还有配套的精品资源,点击获取 简介:C#是一种由微软开发的面向对象编程语言,支持.NET框架,用于多种应用开发。本文章将深入探讨C#的基础语法,包括变量与数据类型、控制结构、函数与方法、类与对象的定义、继承与多态、异常处理、泛型编程、LINQ查询、异步编程技术,以及Lambda表达式与委托的使用。学习这些核心概念对于掌握C#并构建复杂软件系统至关重要。 1. C#... 阅读详情

相关推荐

C#中方括号[]的语法及作用介绍

C#中方括号[]可用于数组,索引、属性,更重要的是用于外部DLL类库的引用。

C#特性(Attributes)

特性(Attributes)是一种崭新的声明性信息。我们不仅可以通过特性来定义设计层面的信息(例如help file, URL for documentation)以及运行时(run-time)信息(例如使XML与class相联系),而且我们还可以利用特性建立自描述(self-describing)组件。在这篇教程中,我们将会看到如何建立和添加特性到各种程序实体以及如何在运行时环境中获取特性信息。...

weixin_34275734的博客 367

使用 ChatGPT/Copilot 提升前端开发效率的 N 种方式

typescript// 输入:根据这个 JavaScript 对象,生成完整的 TypeScript 类型定义id: '123',stock: 50,},// ChatGPT 生成:id: string;discount?: number;// 可选属性// 只读属性// 更进一步,生成 Zod schema 用于运行时验证:});}),});AI 代码助手真正的革命性不在于它能生成多少代码,而在于它改变了我们解决问题的方式。

fineday 1592

C#中的特性(Attributes)(翻译)

  翻译不是为了翻译,是为了学习!因为只有翻译我才能逐句的看完整篇文章。当然还可以得到各位达人的斧正,让我由懂得皮毛到渐入佳境!乐哉,幸哉! 原文 约定:      1.”attribute”和”attributes”均不翻译      2.”property”译为“属性”      3.msdn中的原句不翻译      4.”program entity”译为”语言元素” At...

weixin_33739523的博客 731

瑞芯微RK3576开发板实战:6TOPS NPU如何加速你的AIoT项目(附性能测试)

本文以瑞芯微RK3576开发板为核心,深入探讨其6TOPS NPU在AIoT项目中的实战应用。通过详细的性能测试对比,展示了NPU如何将AI模型推理速度提升15倍以上,并大幅降低CPU负载。文章涵盖从环境搭建、模型转换优化到多屏异显与系统级调优的全流程,为开发者提供了将硬件算力转化为实际项目加速效果的完整指南。

oauth7security的博客 821

基于MediaPipe的智能俯卧撑计数与姿势矫正系统

在现代健身和体能训练中,俯卧撑是最基础也是最有效的自重训练动作之一。然而,许多人在进行俯卧撑训练时常常存在姿势不正确、计数不准确等问题。本文将介绍如何利用计算机视觉和姿态估计技术,开发一个智能的俯卧撑计数与姿势矫正系统。

qq_36224726的博客 916

C#中的方括号[](特性、属性)

约定: 1.”attribute” 和 ”attributes” 均不翻译 2.”property” 译为“属性” 3.msdn 中的原句不翻译 4.”program entity” 译为 ” 语言元素 ” Attributes in C# 介绍 Attributes 是一种新的描述信息,我们既可以使用 attribut...

weixin_30430169的博客 1054

2.2.1.3-移动平均线(python画k线、均线、5日线、买卖点图、python均线策略)

* 绘制一个k线图,也就是蜡烛图 * 计算5日均线值、10日均线值 * 在k线图上,绘制5日线和10日线图 * 在5日线上,绘制与10日线的交叉点(上穿、下穿时) python画k线、均线、5日线、买卖点图、python均线策略

KelvinLiu 3413

深入理解 C# 中的特性(Attribute):方括号 [] 的魔法

特性是派生自类的类,可应用于各类代码元素,如类、方法、属性、字段等。借助特性,我们能为代码元素添加额外描述信息,这些信息可在编译时或运行时被访问,以达成不同功能。除使用内置特性外,我们还能创建自定义特性以满足特定需求。创建自定义特性类需继承自类,还可按需添加属性和构造函数。// 定义自定义特性set;此例中,是自定义特性类,有Message属性和构造函数。特性指定该特性可应用于类和方法。创建好自定义特性类后,即可将其应用到代码元素上。// 方法实现运行时可使用反射读取应用在代码元素上的特性信息。

m0_57836225的博客 1214

软解调详解

在这个示例中,生成了一个随机的比特序列,将其调制为QPSK信号,添加了高斯白噪声,然后计算了每个比特的LLR,并根据LLR的符号进行了解调判决。软解调是一种基于接收信号的概率估计进行解调的方法。与传统的硬解调相比,软解调不仅考虑了接收信号的幅度和相位信息,还利用统计特性计算每个比特为0或1的概率,从而提高了解调性能。软解调过程中涉及的主要公式包括对数似然比(LLR)的计算公式、信号的概率分布函数以及解调判决公式等。软解调的计算处理流程包括信号接收、预处理、相位估计、LLR计算、解调判决和输出等步骤。

ahah12345678的博客 1226

FPGA DDR3实战(四):DDR地址映射自动化测试(1)—— 测试程序设计与代码逻辑

本文介绍了一种DDR地址映射自动化测试方案,旨在提高板卡调试效率。方案通过AXI4协议实现主从端通信,构建了包含地址控制器和测试数据生成器的模块化架构。测试程序支持突发传输、状态监控和错误检测,可灵活配置测试参数。采用状态机控制流程,先写入递增数据再读取比对,完成功能验证和性能评估。该方案可系统化验证DDR的正确性、稳定性和可靠性,相比传统手动测试显著提升效率。

FPGA_小田老师的博客 1979

C#中的方括号[](特性,属性)

转自:http://www.txwb.com/Article/wbcx/Easy/201104/94502.html原 文(http://www.codeproject.com/Articles/2933/Attributes-in-C)约定:     1.”attribute” 和 ”attributes” 均不翻译     2.”property” 译为“属性”     3.msdn 中的原句...

仲崇峰的专栏 1万+

北斗导航 | 卫星导航接收机原理(基础)

卡尔曼滤波,最小二乘,伪距,芯片,模组,接收机,捕获,跟踪,RTK,RTD,PPP,SPP,多普勒,DOP,灵敏度,热启动,冷启动,PNT,北斗发展,MEO,IGSO,GEO,ICD,导航电文,载波,载噪比

尘世冰封的专栏 2343

Unity 之 方括号[ ] 的用法以及作用

Unity 之 方括号[ ] 的用法以及作用

牛牛博士博客 1362

主题035:计算流体力学(CFD)

计算流体力学(Computational Fluid Dynamics, CFD)是利用数值方法求解流体流动、传热传质等问题的学科。CFD已成为化学反应工程中反应器设计和优化的重要工具。∂ρ∂t+∇⋅(ρu)=0 \frac{\partial \rho}{\partial t} + \nabla \cdot (\rho \mathbf{u}) = 0 ∂t∂ρ​+∇⋅(ρu)=0对于不可压缩流动:∇⋅u=0 \nabla \cdot \mathbf{u} = 0 ∇⋅u=0动量方程:∂(ρu)∂t+∇⋅(ρ

kkchenjj的博客 268

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C#方法名前的方括号作用

我们经常会看到一些C#代码的方法名前有一个方括号,里面有一行文字,如: 1、序列化: [Serializable] public void 方法名(){...} 2、WebServices方法: [WebMethod] public void 方法名(){...} 3、Ajax(AjaxPro)方法: [AjaxPro.AjaxMethod] public vo

lins1393997412的专栏 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C#一些高级语法

Net 框架提供了三种预定义特性:Obsolete.Net 框架允许创建自定义特性,用于存储声明性的信息,且可在运行时被检索。该信息根据设计标准和应用程序需要,可与任何目标元素相关。创建并使用自定义特性包含四个步骤:声明自定义特性构建自定义特性在目标程序元素上应用自定义特性通过反射访问特性最后一个步骤包含编写一个简单的程序来读取元数据以便查找各种符号。元数据是用于描述其他数据的数据和信息。该程序应使用反射来在运行时访问特性。我们将在下一章详细讨论这点。一个新的自定义特性应派生自类。

weixin_42376775的博客 2708

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C#十种语法糖

语法糖 指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。 需要声明的是“语法糖”这个词绝非贬义词,它可以给我们带来方便,是一种便捷的写法,编译器会帮我们做转换,而且可以提高开发编码的效率,在性能上也不会带来损失。 一、自动属性 以前:手写私有变量+公有属性 现在:声明空属性,编译器自动生成对应私有成员字段。 写法:输入prop ,连续按两次tab键,自动生成属性。 /// <summary>

极客神殿 5185

React中的JavaScript语法

最近在看《深入浅出react和redux》。为了更好理解flux于是看了此书的前三张,而React和qml都能采用JS(ECMAScript 6)作为主力语言,在此列举一些个人不甚了解的JS语法以供备忘。

brahmsjiang的专栏 855

C# 方括号

特性(Attributes)是一种崭新的声明性信息。我们不仅可以通过特性来定义设计层面的信息(例如help file, URL for documentation)以及运行时(run-time)信息(例如使XML与class相联系),而且我们还可以利用特性建立自描述(self- describing)组件。在这篇教程中,我们将会看到如何建立和添加特性到各种程序实体以及如何在运行时环境中获取特性信息

DandeCode 2035

Objective-C 理解之方括号[ ]的使用

1. 用于通知某个对象该做什么即通知对象去执行某动作 1.1. 在Objective-C中,方括号还有其它意义:它们用于通知某个对象该做什么。 例如: [shape draw]; //这句话说明,通知对象shape去执行draw这个动作,例如让一个rectangle去画一个矩形。 1.2. 在Objective-C中,通知对象执行某种操作,被称为:发送消息。 例如: [shape

阿海的博客 5453
上一篇: web服务控件和form runat=server 表单的关系
下一篇: ASP.NET常见错误大全
carroll0911
博客等级 码龄17年 27粉丝 41原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值