今天遇到一些一般不常用,但说不定什么情况下就能用到的C#关键字。
转换关键字
explicit 定义强制转换
// Must be defined inside a class called Fahrenheit:
public static explicit operator Celsius(Fahrenheit fahr)
{
return new Celsius((5.0f / 9.0f) * (fahr.degrees - 32));
}
implicit 定义隐性转换
// User-defined conversion from Digit to double
public static implicit operator double(Digit d)
{
return d.val;
}
operator 定义重载操作符号
详情MSDN: http://msdn.microsoft.com/zh-cn/library/39bb81c3.aspx
C#使用指针
unsafe 关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的。
fixed 语句禁止垃圾回收器重定位可移动的变量。 fixed 语句只在不安全的上下文中是允许的。 Fixed
还可用于创建固定大小缓冲区。
// The unsafe keyword allows pointers to be used within
// the following method:
static unsafe void Copy(byte[] src, int srcIndex,
byte[] dst, int dstIndex, int count)
{
if (src == null || srcIndex < 0 ||
dst == null || dstIndex < 0 || count < 0)
{
throw new ArgumentException();
}
int srcLen = src.Length;
int dstLen = dst.Length;
if (srcLen - srcIndex < count ||
dstLen - dstIndex < count)
{
throw new ArgumentException();
}// The following fixed statement pins the location of
// the src and dst objects in memory so that they will
// not be moved by garbage collection.
fixed (byte* pSrc = src, pDst = dst)
{
byte* ps = pSrc;
byte* pd = pDst;// Loop over the count in blocks of 4 bytes, copying an
// integer (4 bytes) at a time:
for (int n = 0; n < count / 4; n++)
{
*((int*)pd) = *((int*)ps);
pd += 4;
ps += 4;
}// Complete the copy by moving any bytes that weren‘t
// moved in blocks of 4:
for (int n = 0; n < count % 4; n++)
{
*pd = *ps;
pd++;
ps++;
}
}
}static void Main(string[] args)
{
byte[] a = new byte[100];
byte[] b = new byte[100];
for (int i = 0; i < 100; ++i)
a[i] = (byte)i;
Copy(a, 0, b, 0, 100);
Console.WriteLine("The first 10 elements are:");
for (int i = 0; i < 10; ++i)
Console.Write(b[i] + " ");
Console.WriteLine("\n");
}
详情MSDN:
http://msdn.microsoft.com/zh-cn/library/chfa2zb8.aspx
http://msdn.microsoft.com/zh-cn/library/f58wzh21.aspx
C#关键字explicit、implicit、operator 、unsafe 、fixed