[英]Using Codedom to write VB.Net Properties
查看MSDN上的示例代碼:
這個
' Declares a type.
Dim type1 As New CodeTypeDeclaration("Type1")
' Declares a constructor.
Dim constructor1 As New CodeConstructor
constructor1.Attributes = MemberAttributes.Public
type1.Members.Add(constructor1)
' Declares an integer field.
Dim field1 As New CodeMemberField("System.Int32", "integerField")
type1.Members.Add(field1)
' Declares a property.
Dim property1 As New CodeMemberProperty
property1.Name = "integerProperty"
property1.Type = New CodeTypeReference(GetType(Integer))
' Declares a property get statement to return the value of the integer field.
property1.GetStatements.Add(New CodeMethodReturnStatement(New CodeFieldReferenceExpression(New CodeThisReferenceExpression, "integerField")))
' Declares a property set statement to set the value to the integer field.
' The CodePropertySetValueReferenceExpression represents the value argument passed to the property set statement.
property1.SetStatements.Add(New CodeAssignStatement(New CodeFieldReferenceExpression(New CodeThisReferenceExpression, "integerField"), New CodePropertySetValueReferenceExpression))
type1.Members.Add(property1)
Dim dump As New VBCodeProvider
Dim gen As Compiler.ICodeGenerator = dump.CreateGenerator
Dim opt As New Compiler.CodeGeneratorOptions
gen.GenerateCodeFromType(type1, Console.Out, opt)
應該產生
Public Class Type1
Private integerField As Integer
Public Sub New()
MyBase.New()
End Sub
Private Property integerProperty() As Integer
Get
Return Me.integerField
End Get
Set(ByVal Value As Integer)
Me.integerField = value
End Set
End Property
End Class
但是我沒有看到它生成Set方法的參數,即得到:
Set
Me.integerField = value
End Set
鑒於我已經不得不在示例代碼中添加一些位以實際命名屬性以匹配其示例輸出,因此我懷疑是否有一個導致此問題的細節丟失,但我似乎無法對其進行追蹤? 在編譯代碼的同時,我無法在不手動添加參數的情況下使用屬性,這在一定程度上違背了目的。 知道缺少什么嗎?
關於DevCity的這篇文章的評論#3建議不要緊,但我確實知道Reflector的行為確實符合您的期望,盡管它可能具有代碼生成的自己的實現...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.