[英]how to avoid late binding in vb.net
后期綁定錯誤
默認情況下,C# 在數據類型方面比 VB 更嚴格。 VB 可以讓你將任何東西分配給一個對象,並編寫代碼來調用它的方法,如果你認為它們在那里的話:
Dim o as Object
o = "hello"
Console.Write(o.Length) 'length of string
如果Option Strict
處於On
VB 不允許您執行此操作 - 默認情況下它處於 Off 狀態,這可能是 VB.NET 程序中錯誤的第一大原因。 它還鼓勵草率的編碼習慣
C# 不會讓你這樣做* - 你必須一直嚴格和准確,如果你已經將一個字符串分配給一個對象,那么你必須在使用它之前通過進行強制轉換來證明你知道其中的內容:
Object o;
o = "hello";
Console.Write(((string)o).Length) 'cast o to string, then get length of string
一直在做這種轉換真的很乏味,因為預先聲明正確的類型要容易得多:
String o;
o = "hello";
Console.Write(o.Length)
后期綁定是一個特性,它可以讓你在編譯時跳過嚴格的限制,編譯器只會假設你是對的,並在運行時自己弄清楚對象變量內部是什么樣的東西。 如果它是一個字符串,那么 Length 就可以正常工作。 如果它是一個沒有Length
的整數,你會崩潰
所以,因為object
沒有SetDataSource
方法; 您必須在編譯時聲明正確的rpt
類型。 如果它是某個 CrystalReports ReportViewer 類,那么您確實必須將其聲明為
using CrystalReports;
...
ReportViewer rpt;
if(...)
rpt.SetDataSource(...);
*有辦法,但我不會深入研究,因為它不利於學習
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.