首页 > 解决方案 > 如何访问附加了属性的参数?

问题描述

这是我的代码:

Imports System.Runtime.CompilerServices

<AttributeUsage(AttributeTargets.Parameter)>
Public Class attCallerInfo
    Inherits Attribute

    Public Sub New(<CallerFilePath> Optional path As String = logOrigin.path_default,
                   <CallerMemberName> Optional method As String = logOrigin.method_default)

        Me.Origin = New logOrigin(path, method)
    End Sub

    Public ReadOnly Property Origin As logOrigin

End Class

...以及它应该被称为的方式:

Public Sub New(<attCallerInfo()> Optional ByRef origin As logOrigin = Nothing)

代码信息:

我现在如何实现,我的 attCallerInfo 被调用,获取文件和成员并将它们传递给我的参数源(第二个代码块)?

感谢 Daedra 的帮助

标签: .netvb.netparametersattributes

解决方案


我不会用另一个属性解决这个问题,而是一个普通的类,像这样:(我Foo在我的例子中称你没有进一步指定的包含构造函数的类......)

Public Class Foo

    Public Sub New(<CallerFilePath> Optional path As String = Nothing, <CallerLineNumber> Optional lineNumber As Int32 = 0, <CallerMemberName> Optional method As String = Nothing)
        Me.New(New CallerInfo(path, lineNumber, method))
    End Sub

    Public Sub New(callerInfo As CallerInfo)
        'Do something with it...
        Me.CallerInfo = callerInfo
    End Sub

End Class

以及您作为普通类实现的 CallerInfo :

Public Class CallerInfo

    Public Sub New(path As String, lineNumber As Int32, method As String)
        Me.Path = path
        Me.LineNumber = lineNumber
        Me.Method = method
    End Sub

    Public ReadOnly Property Path As String
    Public ReadOnly Property LineNumber As Int32
    Public ReadOnly Property Method As String

End Class

的用法Foo很简单,如下所示:

Dim myFoo As New Foo()

推荐阅读