回答
如果你問「類型安全」的一般手段的想法,那就是允許開發人員是某些代碼的特性直接支持一個價值或客體會表現出某些性質(即屬於某種類型),以便他/她能夠以特定的方式使用它,而不用擔心意外或未定義的行爲。
例如,在C#中,你可以說ArrayList
類不類型安全的,因爲它可以存儲任何對象,這意味着你可以做類似如下:
var integers = new ArrayList();
integers.Add(1);
integers.Add(2);
integers.Add("3");
for (int i = 0; i < integers.Count; ++i) {
int integer = (int)integers[i];
// do something
}
的由於String
派生自Object
(如Int32
),所以上面將編譯,因爲值「3」即使它是一個字符串而不是一個整數也可以合法地添加到ArrayList
。但是,當您嘗試將integer
設置爲(int)integers[2]
時,它會拋出InvalidCastException
,因爲String
不能被鑄造轉換爲Int32
。
在另一方面,List<T>
類是類型安全爲正好相反的理由。 - 即,上面的代碼將不編譯如果integers
是一個List<int>
。您開發人員從類型安全的List<int>
訪問的任何值您可以是某些是int
(或任何相應的T
適用於任何通用List<T>
);因此您可以確保您可以執行操作,例如投射到int
(顯然)或者說long
。
類型安全代碼只訪問 存儲位置,它被授權訪問 。例如,類型安全代碼 無法從另一個 對象的專用字段中讀取值。它只能以明確定義的方式訪問 類型,允許的方式爲 。
在剛剛在時間(JIT)編譯, 可選驗證過程 檢查一個 方法的元數據和微軟 中間語言(MSIL)被JIT編譯成本機 機器代碼,以驗證它們是 類型安全。如果 代碼有權繞過 驗證
雖然類型安全 的驗證是不是強制性的運行託管代碼這一過程被跳過, 類型安全起着 裝配隔離和安全 執法至關重要的作用。當代碼是類型安全的, 公共語言運行庫可以 彼此完全隔離程序集從 。此隔離有助於 確保程序集不能相互影響 ,並且它提高了應用程序的可靠性。
欲瞭解更多請參考msdn link
一個很好的文章,解釋它是here
Ç - 你宣佈一個int,它轉換成char和存取存儲器超出INT的邊界
int i = 10;
char *s = (char*)i;
print(*(s+10));
C# - 類型很安全
int i = 10;
char *s //This is invalid unless you are using unsafe context.
個
指針不被.NET
+1 TypeSafe與CLR或程序的內存訪問有關,而不是關注TYPES。因此,針對此實際差異的+1響應。 REF:http://www.exforsys.com/tutorials/csharp/.-net-type-safety.html – Sumeet 2011-05-09 06:57:02
C沒有奇怪的演員是*類型安全*(除非常古老的所有標準)。你們的樣本在這方面並不嚴格。你說...可以說...關於記憶安全/不安全的解決方案?具有奇怪轉換的C#在正常部分可能是不安全的(「非不安全」):正面編譯,運行時錯誤 – 2015-09-25 06:29:20
已引入.NET中的類型安全性,以防止一種類型的對象窺探爲其他對象分配的內存。
例如,詳細的討論,請visit this link
不同問題的好回答:) – 2015-09-25 06:30:28
我不與這裏的一些答案一致。 C#的安全級別很低。
編輯:類型安全有2個層面的含義(如我們一般鐵餅關於編程語言,因爲在這個線程)
一個是編譯時類型安全,靠近重構等,編譯器捕捉錯別字,拼寫錯誤的值分配給錯誤的變量(屬性),即字符串到int變量。典型的C#代碼是類型安全的,已知的禁用此功能的方式是dynamic
關鍵字,或者非泛型容器,像上面這樣的錯誤會延遲到運行時。例如:非編譯C/C++代碼在編譯時通常是安全的。我認爲可能寫入(黑客)鑄造在C#中隱藏類型衝突。
下一級別是運行時類型安全,C#通常是安全的(沒有不安全的部分)。即使動態值也會在運行時檢查。相反:C/C++在運行時不是類型安全的。如果編譯器接受代碼,則不會在運行時檢查非邏輯分配,從而爲C語言提供典型的奇怪/奇怪/系統級或遲延錯誤。
很少有回答者在這個線程中混合了C#安全的其他領域(內存安全,範圍安全,空指針等)。嚴格來說,這些都是不同的安全。
你的意思是類型安全的特別或類型安全帶來什麼影響?
我不同意接受的答案:ArrayList的是類型安全的無知(既不是類型安全的,也沒有類型安全):https://stackoverflow.com/a/17984521/1145224
裏希特 - 通過C#,第4版(第93頁)CLR:
類型安全是CLR的主要特徵。您始終可以通過調用非虛擬 System.Object的GetType方法來始終發現 對象的確切類型。
例如Hero類不能覆蓋GetType方法成爲一種SuperHero類型。
此System.Object功能使CLR能夠檢查在運行時投射對象的可能性。例如:
internal class Employee { ... }
public sealed class Program
{
public static Main()
{
DateTime dt = new DateTime(2016, 1, 1);
PromoteEmployee(newYears);
}
public static PromoteEmployee(Object o)
{
Employee e = (Employee)o; //InvalidCastException, runtime error
}
}
將Casting DateTime類型轉換爲Employee類型是一個非類型安全嘗試投入的示例。
- 1. 什麼是類型安全?
- 2. 什麼是vb.net中的類型安全?
- 3. 爲什麼不是運算符類型在java中安全的?
- 4. 輸入安全或輸入安全的類型是什麼意思?
- 5. 這裏的編譯時類型安全是什麼意思?
- 6. 爲什麼.Net框架類中的靜態方法總是線程安全的?
- 7. .NET安全中的Principal是什麼意思?
- 8. 什麼是.NET中的代碼訪問安全性
- 9. 這是什麼.net編碼類型
- 10. 什麼是.NET的各種文件類型的mime類型?
- 11. .Net中的dr [「MyColumn」]對象的類名稱/類型是什麼?
- 12. 什麼版本的.NET Framework是最安全的代碼?
- 13. 使用類型安全的集合類有什麼好處?
- 14. 什麼是「安全變量」?
- 15. 什麼是運輸安全?
- 16. 什麼是春季安全
- 17. 什麼是IP安全?
- 18. 什麼是C/C++中的「安全」和「不安全」代碼?
- 19. Microsoft .NET安全模型
- 20. 什麼是類型名稱的.NET中的最大長度
- 21. .NET中PerformanceCounter類的用法是什麼?
- 22. 什麼是每個.NET類
- 23. 爲什麼TreeSet <T>是.NET中的內部類型?
- 24. 什麼是Scala 2.8中.Net ArrayList可變類型的等價物?
- 25. 什麼是.NET設計器中的「找不到類型System.Collections.Generic.List」?
- 26. 4.0 .NET Framework中的所有通用集合/類型是什麼?
- 27. .Net中科學計算的推薦數據類型是什麼?
- 28. .NET中事件的返回類型是什麼?
- 29. 什麼是Visual Basic .NET中的UInt32數據類型?
- 30. 爲什麼它不是類型安全的將基類型實例轉換爲派生類型對象/參考
[什麼是類型安全?](http://stackoverflow.com/questions/260626/what-is-type-safe) – Braiam 2015-04-23 13:14:23