posts - 195,  comments - 30,  trackbacks - 0

http://blog.csdn.net/Core_Star/archive/2010/03/30/5433862.aspx
C#中方括号可用于数组,索引、属性,更重要的是用于外部DLL类库的引用。

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

    [DllImport("kernel32.dll")]这叫引入kernel32.dll这个动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)]这些是类或方法的属性这个在大型的软件开发中是很有用的,如项目中要用到的一个模块是通用的,我们就可以将其单独抽出来做成控件,这个时候类或是方法的属性就有用了加上这些后使控件类在使用的时候就会有相应的列项提示等等

posted on 2011-03-08 14:03 luis 阅读(649) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿(3)

随笔分类

随笔档案

文章分类

文章档案

友情链接

搜索

  •  

最新评论

阅读排行榜

评论排行榜