【问题标题】:What did VB replace the function "Set" with?VB用什么替换了“Set”函数?
【发布时间】:2009-09-23 22:35:48
【问题描述】:

我发现了几个包含使用“设置”功能的表单的 aspx 代码。当我在托管服务器上试用它们时,我收到一条错误消息“不再支持设置”。有谁知道是什么取代了“设置”命令?

更具体地说,我该如何更改:

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

要与 VB.NET 兼容?

【问题讨论】:

    标签: vb.net set vb6-migration


    【解决方案1】:

    如果你指的是 VB6 语法

    Set obj = new Object
    

    然后您可以简单地删除 Set

    obj = new Object()
    

    【讨论】:

    • 原来的样子是这样的: ' 发送电子邮件 Dim mail Set mail = Server.CreateObject("CDONTS.NewMail") mail.To = EmailTo mail.From = EmailFrom mail.Subject = Subject mail .Body = 正文邮件。发送
    • 这样就可以通过删除“Set”这个词来改变?
    • 是的。在过去,您必须区分对象的分配和标量类型。现在一切都几乎是一个对象,所以他们完全抛弃了 set 关键字。我真的很惊讶他们没有留下它并让编译器忽略它,因此旧代码无需更改即可编译。
    【解决方案2】:

    Set 是 VB6 中的关键字,随着 VB.NET 的侵入,在此上下文中使用的关键字已被删除。

    以前,Set 用于指示正​​在分配对象引用(Let 是默认值)。由于不再支持默认属性,除非它们接受参数,因此这些语句已被删除。

    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
    

    【讨论】:

    • “因为默认属性不再受支持,除非它们接受参数”...我不明白这句话是什么意思。
    • 假设您有一个具有默认属性名称的 Person 对象。然后你可以说 HisName = MyPersonObject (并且 VB 会理解你的意思是 MyPersonObject.Name。现在,如果你想将 MyPersonObject 分配给 HisName ,你必须用户 Set,即 Set HisName = MyPersonObject。现在默认属性不是支持,Set 变得多余并被删除。
    • 不,我认为罗伯特哈维不明白的是“除非他们接受参数”部分。我也对此感到困惑。
    • 哇,感谢您深入理解这门语言。但是“Set”关键字并没有从语言中删除;成员属性设置器需要它,因此他们为此选择了它。
    • “除非他们接受参数”..我相信这是在谈论索引器。
    【解决方案3】:

    .Net 需要记住的一些事项:

    • 切勿在 .Net 代码中使用 Server.CreateObject()。永远。
    • 永远不要在没有明确类型的情况下对变量进行暗淡处理。除了新的Option Infer linq 类型
    • 切勿使用 Set 关键字。定义属性时除外。

    事实上,在 .Net 中你可能完全摆脱对 CDONTS 的依赖,因为 .Net 具有内置的邮件支持:

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

    【讨论】:

      猜你喜欢
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 2021-03-07
      • 1970-01-01
      • 2022-12-07
      相关资源
      最近更新 更多