I:近いが明らかに間違っこれを、生成
Dim eq As New CodeMemberMethod()
eq.Name = "Operator ="
eq.Parameters.Add(New CodeParameterDeclarationExpression(New CodeTypeReference("MyType"), "x"))
eq.Parameters.Add(New CodeParameterDeclarationExpression(New CodeTypeReference("MyType"), "y"))
eq.Attributes = MemberAttributes.Public Or MemberAttributes.Static
eq.ReturnType = New CodeTypeReference(GetType(Boolean))
eq.Statements.Add(New CodeMethodReturnStatement(New CodeBinaryOperatorExpression(New CodeVariableReferenceExpression("x"), CodeBinaryOperatorType.IdentityEquality, New CodeVariableReferenceExpression("y"))))
type.Members.Add(eq)
:
は
Public Shared Operator =(ByVal x As MyType, ByVal y As MyType) As Boolean
Return x Is y
End Operator
私は考えることができる最も近いハックは以下これを行うにはこのソリューションは嫌いですが、機能します。
Dim eq As New CodeSnippetTypeMember("Public Shared Operator =(ByVal x As MyType, ByVal y As MyType) As Boolean" & Environment.NewLine & "Return x Is y" & Environment.NewLine & "End Operator")
type.Members.Add(eq)
私は正しい方法は、メンバーの実装を提供するMicrosoft.VisualBasic.VBCodeGeneratorから継承し、その後、メンバーを定義するためにCodeTypeMemberから継承とは何かを持っていると確信しているが、私は持っていません。そのすべてを処理する時間。私はCodeDomからT4に切り替えるべきだと思います。
私はそれも嫌いですが、そこに行くのが一番早いです。 – tobsen