淺談C#中[]的幾種用法
一、導入外部DLL函數(shù)
如[DllImport(“kernel32.dll”)]這叫引入kernel32.dll這個動態(tài)連接庫。這個動態(tài)連接庫里面包含了很多WindowsAPI函數(shù),如果你想使用這面的函數(shù),就需要這么引入。舉個例子:
[DllImport(“kernel32.dll”)] private static extern void FunName(arg,[arg]);
extern 作用:標識這個變量或者函數(shù)定義在其他文件 ,提示編譯器遇到此變量的時,在其他模塊里尋找,這里是在提供的動態(tài)庫里找
示列代碼:
using System;
using System.Text;
using System.Runtime.InteropServices;
namespace Windows.Help
{
public partial class SystemInfo
{
[DllImport("kernel32")]
public static extern void GetWindowsDirectory(StringBuilder WinDir, int count);
[DllImport("kernel32")]
public static extern void GetSystemDirectory(StringBuilder SysDir, int count);
public static void Main () {
const int nChars = 128;
StringBuilder Buff = new StringBuilder(nChars);
GetWindowsDirectory(Buff, nChars);
String t = "Windows路徑:" + Buff.ToString();
System.Console.WriteLine(t);
}
}
}

二、結構體時表明屬性
如[StructLayout(LayoutKind.Sequential) ]與[StructLayout(LayoutKind.Explicit)] ,首先介紹一下 結構體和類的區(qū)別 :類是按引用傳遞 結構體是按值傳遞
進入正題:
結構體是由若干成員組成的.布局有兩種
1.Sequential,順序布局,比如
struct S1{
int a;
int b;
}
那么默認情況下在內(nèi)存里是先排a,再排b
也就是如果能取到a的地址,和b的地址,則相差一個int類型的長度,4字節(jié)
[StructLayout(LayoutKind.Sequential)]
struct S1
{
int a;
int b;
}
這樣和上一個是一樣的.因為默認的內(nèi)存排列就是Sequential,也就是按成員的先后順序排列.
2.Explicit,精確布局
需要用FieldOffset()設置每個成員的位置
這樣就可以實現(xiàn)類似c的公用體的功能
[StructLayout(LayoutKind.Explicit)]
struct S1
{
[FieldOffset(0)]
int a;
[FieldOffset(0)]
int b;
}
這樣a和b在內(nèi)存中地址相同
到此這篇關于淺談C#中[]的幾種用法的文章就介紹到這了,更多相關C# []用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
DataGridView設置單元格的提示內(nèi)容ToolTip
這篇文章介紹了DataGridView設置單元格提示內(nèi)容ToolTip的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02
C#使用FileStream循環(huán)讀取大文件數(shù)據(jù)的方法示例
這篇文章主要介紹了C#使用FileStream循環(huán)讀取大文件數(shù)據(jù)的方法,結合實例形式分析了FileStream文件流的形式循環(huán)讀取大文件的相關操作技巧,需要的朋友可以參考下2017-05-05

