2009-09-23 16 views
5

Tôi đã tìm thấy một số mã aspx cho các biểu mẫu bao gồm việc sử dụng chức năng "Đặt". Khi tôi thử chúng trên máy chủ lưu trữ, tôi nhận được thông báo lỗi rằng "Set không còn được hỗ trợ" nữa. Bất cứ ai biết những gì thay thế các "Set" lệnh?VB đã thay thế hàm "Đặt" bằng gì?

Cụ thể hơn, làm thế nào để thay đổi điều này:

Dim mail 
Set mail = Server.CreateObject("CDONTS.NewMail") 
mail.To = EmailTo 
mail.From = EmailFrom 
mail.Subject = Subject 
mail.Body = Body 
mail.Send 

là VB.NET tương thích?

Trả lời

13

Nếu bạn có ý nghĩa cú pháp VB6

Set obj = new Object 

sau đó bạn chỉ có thể loại bỏ các Set

obj = new Object() 
+0

Đây là những gì nó trông giống như ban đầu: 'gửi email Dim email Set email = Server.CreateObject ("CDONTS.NewMail") mail.To = EmailTo mail.From = EmailFrom mail.Subject = Chủ đề mail.Body = Body mail.Send –

+0

Vì vậy, cái đó ould chỉ được thay đổi bằng cách loại bỏ từ "Set"? –

+0

Có. Trong những ngày cũ, bạn phải phân biệt giữa việc gán các đối tượng và các loại vô hướng. Bây giờ tất cả mọi thứ là khá nhiều một đối tượng để họ bán hoàn toàn các từ khóa thiết lập. Tôi thực sự ngạc nhiên khi họ không rời khỏi nó và có trình biên dịch bỏ qua nó để mã cũ sẽ biên dịch mà không có sự thay đổi. – JohnFx

6

Set là một từ khóa trong VB6, với intrudction của VB.NET từ khóa, như được sử dụng trong bối cảnh này, đã bị xóa.

Trước đây, Set được sử dụng để chỉ ra rằng một tham chiếu đối tượng đã được gán (Cho là mặc định). Bởi vì các thuộc tính mặc định không còn được hỗ trợ trừ khi chúng chấp nhận các tham số, các câu lệnh này đã bị loại bỏ.

Module Module1 
    Sub Main() 

    Dim person As New Person("Peter") 
    Dim people As New People() 

    people.Add(person) 

    'Use the default property, provided we have a parameter' 

    Dim p = people("Peter") 

    End Sub 
End Module 

Public Class People 
    Private _people As New Dictionary(Of String, Person) 

    Public Sub Add(ByVal person As Person) 
    _people.Add(person.Name, person) 
    End Sub 

    Default Public ReadOnly Property Person(ByVal name As String) As Person 
    Get 
     Return _people(name) 
    End Get 
    End Property 
End Class 

Public Class Person 
    Private _name As String 

    Public Sub New(ByVal name As String) 
    _name = name 
    End Sub 

    Public ReadOnly Property Name() As String 
    Get 
     Return _name 
    End Get 
    End Property 
End Class 
+1

"Vì các thuộc tính mặc định không còn được hỗ trợ trừ khi chúng chấp nhận các tham số" ... Tôi không thể hiểu ý nghĩa của câu lệnh này. –

+7

Giả sử bạn có đối tượng Person với Tên thuộc tính mặc định. Sau đó bạn có thể nói HisName = MyPersonObject (và VB sẽ hiểu rằng bạn có nghĩa là MyPersonObject.Name. Bây giờ nếu bạn muốn gán MyPersonObject vào HisName, bạn sẽ phải sử dụng Set, ví dụ: Set HisName = MyPersonObject. – mjv

+1

@mjv lời giải thích ngắn gọn tốt đẹp ở đó, công việc tốt –

3

Một số điều cần nhớ cho Net:

  • KHÔNG BAO GIỜ sử dụng Server.CreateObject() trong mã Net. Không bao giờ.
  • KHÔNG BAO GIỜ Dim một biến mà không cho nó một loại rõ ràng. Ngoại trừ các loại mới Option Infer linq
  • KHÔNG BAO GIỜ sử dụng từ khóa Đặt. Ngoại trừ khi xác định thuộc tính.

Trong thực tế, trong Net bạn có thể thoát khỏi lẽ của CDONTS dependancy hoàn toàn, như Net có một built-in hỗ trợ mail:

Dim smtp As New System.Net.SmtpClient() 
Dim message As New System.Net.MailMessage(EmailFrom, EmailTo, Subject, Body) 
smtp.Send(message) 
+0

Họ đã thêm Tùy chọn suy luận kể từ lần đầu tiên tôi viết câu trả lời này. Với Option Infer, đôi khi nó thích hợp với 'Dim' không có loại. –

Các vấn đề liên quan