J'ai trouvé plusieurs codes ASPX pour les formes qui incluent l'utilisation d'une fonction "SET". Lorsque je les essaie sur le serveur d'hébergement, je reçois un message d'erreur qui "définir n'est plus pris en charge". Tout le monde savait ce qui a remplacé la commande "SET"?
Plus spécifiquement, comment modifier ceci: P>
Dim mail Set mail = Server.CreateObject("CDONTS.NewMail") mail.To = EmailTo mail.From = EmailFrom mail.Subject = Subject mail.Body = Body mail.Send
3 Réponses :
Si vous voulez dire la syntaxe VB6
obj = new Object()
Voici à l'origine: 'Envoyer un courrier électronique Dim Mail Set Mail = Server.CreateObject ("CDONTS.Newmail") Mail.To = Emailto Mail.from = Emailfrom Mail.subject = Soumis.Body Mail.Pody.
Donc, cela serait simplement changé en supprimant le mot "SET"?
Oui. Dans les vieux jours, vous deviez distinguer entre l'affectation d'objets et de types scalaires. Maintenant, tout est à peu près un objet afin qu'ils ont complètement vidé le mot clé défini. Je suis en fait surpris qu'ils ne l'ont pas laissé et que le compilateur l'ignore pour que l'ancien code compilait sans le changement.
SET est un mot-clé dans VB6, avec l'intrudction de vb.net le mot clé, tel qu'utilisé dans ce contexte, a été supprimé.
Autrefois, l'ensemble a été utilisé pour indiquer qu'une référence d'objet a été attribuée (laissez-la défaut). Parce que les propriétés par défaut ne sont prises en charge que si elles acceptent les paramètres, ces instructions ont été supprimées. P>
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
"Parce que les propriétés par défaut ne sont plus prises en charge que si elles acceptent les paramètres" ... Je ne peux pas comprendre ce que signifie cette affirmation.
Dites que vous avez eu un objet personne avec le nom de propriété par défaut. Vous pourriez alors dire hisname = mypersonObject (et VB comprendrait que vous voulez dire mypersonObject.name. Maintenant, si vous vouliez affecter MyPersonObject à HisName, vous auriez à l'utilisateur défini, c'est-à-dire définir HisName = MyPersonObject. Maintenant que les propriétés par défaut ne sont pas Soutenu, l'ensemble est devenu redondant et a été supprimé.
Non, je pense que ce que Robert Harvey ne comprend pas, c'est le "à moins qu'ils n'acceptent les paramètres". Je suis impressionné par ça aussi.
Wow, félicitations pour comprendre la langue à cette profondeur. Mais le mot-clé "Set" n'a pas été retiré de la langue; Il était nécessaire pour les compteurs des propriétés membres, ils l'ont donc coopté pour cela.
"Sauf si ils acceptent les paramètres" .. Je crois que cela parle d'indexateurs.
@ STICTY77 / @GREGORY H: Oui, le "sauf indication contraire des paramètres" est dû au fait que les propriétés par défaut n'ont pas été complètement interdites, seuls ceux qui ne nécessitent rien après leur nom. Une propriété par défaut typique est une collection de quelque chose. Par exemple, un livre peut avoir une propriété par défaut de pages, une collection d'objets de page. Vous pouvez donc écrire indexPage1 = MyBook (176) et la présence du paramètre Indexer (176) supprime toute ambiguïté.
@MJV Que se passe-t-il lorsque la propriété par défaut renvoie un autre objet avec une propriété par défaut? Une simple affectation ne renvoie-t-elle que la profondeur de la première propriété par défaut? Ou recueille-t-il jusqu'à la propriété la plus interne par défaut?
Certaines choses à retenir pour .NET:
Inférer d'option Code> Linq Types Li>
- n'utilisez jamais le mot-clé défini. Sauf lors de la définition d'une propriété. Li>
ul>
En fait, vous pouvez vous débarrasser probablement de la dépendance des CDONTS entièrement, car .NET dispose d'un support de courrier intégré: P>
Dim smtp As New System.Net.SmtpClient()
Dim message As New System.Net.MailMessage(EmailFrom, EmailTo, Subject, Body)
smtp.Send(message)