的一個很重要的特性就是跨語言的編程
用C#寫的一個類
using System;
namespace CLSsample
{
public class CLSTest
{
public CLSTest()
{
}
public void ABC()
{
Console
}
}
}
在中調用
Dim c As CLSsample
c
現在給dll中的CLSTest類加一個函數
public void abc()
{
Console
}
先編譯C#寫的這個dll
重載決策失敗
原因很簡單
而真正的原因在於用C#寫的這個類是不符合CLS(公共語言規范)的
現在在命名空間前面加上一句
[assembly:CLSCompliant(true)]
namespace CLSsample
{
public void ABC()
{
Console
}
public void abc()
{
Console
}
}
這時候再編譯
只在大小寫不同的標識符
要編譯通過
[CLSCompliantAttribute(false)]
指出 abc函數 是不符合 CLS 的
下面是MSDN中對CLS的部分說明
CLS 在設計上足夠大
大多數語言都可以支持它
構造都被排除在 CLS 之外
(如果它們選擇這樣做)
也就是說開發的類庫必須遵守CLS才可以更好的被其它的語言所使用
上面的情況
通用的類庫的時候
看看 framework中Int
[CLSCompliant(false)]
uint System
這是因為有的語言不支持UInt
再看看對UInt
[Serializable
public struct UInt
{
}
在前陣子的一個隨筆
現在體會得更深了
剛開始系統學框架
From:http://tw.wingwit.com/Article/os/youhua/201311/10694.html