2009-09-23 9 views
5

He encontrado varios códigos aspx para formularios que incluyen el uso de una función "Establecer". Cuando los pruebo en el servidor de alojamiento, recibo un mensaje de error que indica que "Establecer ya no es compatible". ¿Alguien sabe qué reemplazó el comando "Establecer"?¿Qué reemplazó VB la función "Establecer" con?

Más específicamente, ¿cómo cambio esto:

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

para ser compatible VB.NET?

Respuesta

13

Si se refiere a la sintaxis de Visual Basic 6

Set obj = new Object 

entonces usted puede simplemente eliminar el Conjunto

obj = new Object() 
+0

Esto es lo que parece inicialmente: "enviar correo electrónico Dim correo electrónico Set = Server.CreateObject ("CDONTS.NewMail") mail.To = EmailTo mail.From = EmailFrom mail.Subject = Asunto mail.Body = cuerpo mail.Send –

+0

Así que W ¿Se podría cambiar simplemente eliminando la palabra "Establecer"? –

+0

Sí. En los viejos tiempos, había que distinguir entre la asignación de objetos y los tipos escalares. Ahora todo es más o menos un objeto, por lo que abandonaron por completo la palabra clave set. De hecho, estoy sorprendido de que no lo hayan dejado y hagan que el compilador lo ignore para que el código viejo se compile sin el cambio. – JohnFx

6

Set es una palabra clave en VB6, con el intrudction de VB.NET la palabra clave, como se usa en este contexto, fue eliminado.

Anteriormente, Set se usaba para indicar que se estaba asignando una referencia de objeto (Let era el valor predeterminado). Debido a que las propiedades predeterminadas ya no son compatibles a menos que acepten parámetros, estas declaraciones se han eliminado.

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

"Porque las propiedades predeterminadas ya no son compatibles a menos que acepten parámetros" ... No puedo entender lo que significa esta afirmación. –

+7

Supongamos que tiene un objeto Persona con el nombre de propiedad predeterminado. Entonces podría decir HisName = MyPersonObject (y VB entendería que se refiere a MyPersonObject.Name. Ahora, si quisiera asignar MyPersonObject a HisName, tendría que establecer el usuario, es decir, establecer HisName = MyPersonObject. Ahora que las propiedades predeterminadas no son compatible, el conjunto se volvió redundante y se eliminó. – mjv

+1

@mjv bonita explicación concisa, buen trabajo –

3

Algunas cosas a tener en cuenta para .Net:

  • No utilice nunca Server.CreateObject() en el código .NET. Nunca.
  • NUNCA Reduzca una variable sin darle un tipo explícito. Excepto para los nuevos tipos Option Infer linq
  • NUNCA utilice la palabra clave Establecer. Excepto cuando se define una propiedad.

De hecho, en .Net usted puede deshacerse de la dependencia probablemente CDONTS por completo, ya que tiene .Net un soporte incorporado mail:

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

Han agregado Option Infer desde que escribí esta respuesta por primera vez. Con Option Infer on, a veces es apropiado 'Dim' sin ningún tipo. –

Cuestiones relacionadas