New VB 11 Caller Information Attribute

.NET Framework , Posted at : Aug/23/2012  
1987 Views   0 Comments

Salah satu fitur baru dari Visual Basic 11 yaitu Caller Info atribut. Fitur tersebut berguna untuk melakukan tracing, diagnostic atau debugging. Dengan menggunakan atribut tersebut maka kode program yang memanggil sebuah method dapat diketahui source file yang memanggil method, nomor baris kode yang memanggil method dan nama member yang memanggil method. Implementasi caller info atribut digunakan sebagai optional input parameter pada method yang akan di trace atau di diagnosa.

 

Beberapa atribut tersebut yaitu :

  1. CallerFilePathAttribute : Digunakan untuk mengetahui source file yang memanggil method.
  2. CallerLineNumberAttribute : Digunakan untuk mengetahui nomor baris kode yang memanggil method.
  3. CallerMemberNameAttribute : Digunakan untuk mengetahui nama member yang memanggil method.

Karena atribut tersebut digunakan sebagai optional input parameter maka aturan penggunaannya juga mengikuti syarat-syarat penggunaan optional parameter pada sebuah method yaitu : Nilai default value harus di definisikan, optional input parameter harus ditempatkan di akhir setelah non optional input parameter. Apabila optional input parameter tersebut tidak diisi pada saat method dipanggil maka nilai yang dihasilkan oleh atribut tersebut akan diisi secara otomatis sesuai dengan source nya. Namun tentunya kita dapat mengisi optional parameter tersebut dengan nilai yang sudah ditentukan pada saat kode program ditulis. Atribut CallerLineNumber akan menghasilkan nilai integer, sedangkan untuk kedua atribut lainnya menghasilkan nilai string.

Output yang dihasilkan oleh atribut CallerMemberName berbeda dengan kedua atribut lainnya. Apabila member yang memanggil method berupa Sub, Function, atau Event maka nilai yang dihasilkan yaitu nama Sub, Function atau Event tersebut. Pemanggilan dari constructor akan menghasilkan nilai “.ctor” dan “.cctor” untuk static atau shared constructor. Sedangkan pemanggilan dari sebuah operator overloading akan menghasilkan nilai “op_Addition”. Untuk menggunakan atribut-atribut tersebut harus dilakukan Imports terlebih dahulu ke namespace System.Runtime.CompilerServices.

Berikut adalah contoh kode program yang digunakan untuk memperlihatkan penggunaan dari ketiga atribut diatas. Pada contoh ini atribut Caller Info di implementasikan pada sebuah Sub dan yang memanggil Sub tersebut dibuat beragam mulai dari Sub, Property, Constructor, Shared Constructor dan Operator Overloading.

Imports System.Runtime.CompilerServices

Public Class NewCallerInfoSample

    Private Shared ReadOnly StaticCreatedTime As DateTime

    Shared Sub New()
        StaticCreatedTime = Now.ToLongTimeString
        TestSharedMethod(String.Format("Called from static constructor at : {0}",
                                       StaticCreatedTime.ToLongTimeString))
    End Sub

    Public Sub New()
        TestMethod("Called from constructor")
    End Sub

    Public Sub TestMethodCaller()
        TestMethod("Called from method (Sub).")
    End Sub

    Private strMessage As String
    Public Property MessageInfo As String
        Get
            Return strMessage
        End Get
        Set(value As String)
            strMessage = value
            TestMethod("Called from Property.")
        End Set
    End Property

    Public Shared Operator +(ByVal Class1 As NewCallerInfoSample,
                             ByVal Class2 As NewCallerInfoSample) As String
        TestSharedMethod("Called from Operator Overloading.")
        Return Class1.MessageInfo & Class2.MessageInfo
    End Operator

    Private Shared Sub TestSharedMethod(Info As String,
                          <CallerFilePath> Optional SourceFile As String = Nothing,
                          <CallerLineNumber> Optional SourceLineNumber As Integer = 0,
                          <CallerMemberName> Optional SourceCallerMember As String = Nothing)

        Console.WriteLine("TestSharedMethod Called from :")
        Console.ForegroundColor = ConsoleColor.Yellow
        Console.WriteLine(String.Format("Info : {0}", Info))
        Console.ForegroundColor = ConsoleColor.White
        Console.WriteLine(String.Format("Source File : {0}", SourceFile))
        Console.WriteLine(String.Format("Source Line Number : {0}", SourceLineNumber))
        Console.ForegroundColor = ConsoleColor.Yellow
        Console.WriteLine(String.Format("Source Caller Member : {0}", SourceCallerMember))
        Console.ForegroundColor = ConsoleColor.White
        Console.WriteLine(New String(CChar("="), 50))
    End Sub

    Private Sub TestMethod(Info As String,
                          <CallerFilePath> Optional SourceFile As String = Nothing,
                          <CallerLineNumber> Optional SourceLineNumber As Integer = 0,
                          <CallerMemberName> Optional SourceCallerMember As String = Nothing)

        Console.WriteLine("TestMethod Called from :")
        Console.ForegroundColor = ConsoleColor.Yellow
        Console.WriteLine(String.Format("Info : {0}", Info))
        Console.ForegroundColor = ConsoleColor.White
        Console.WriteLine(String.Format("Source File : {0}", SourceFile))
        Console.WriteLine(String.Format("Source Line Number : {0}", SourceLineNumber))
        Console.ForegroundColor = ConsoleColor.Yellow
        Console.WriteLine(String.Format("Source Caller Member : {0}", SourceCallerMember))
        Console.ForegroundColor = ConsoleColor.White
        Console.WriteLine(New String(CChar("="), 50))
    End Sub

End Class

Class tersebut dipanggil dari sebuah Console Application dengan kode berikut ini :

Module Module1

    Sub Main()
        Dim objCallerInfo1 As New NewCallerInfoSample
        objCallerInfo1.TestMethodCaller()

        Dim objCallerInfo2 As New NewCallerInfoSample With
            {.MessageInfo = "Hello from object-1. "}

        Dim objCallerInfo3 As New NewCallerInfoSample With
            {.MessageInfo = "Hello from object-2. "}

        Dim objCallerInfo4 = objCallerInfo2 + objCallerInfo3

        Console.Read()
    End Sub

End Module

Hasil eksekusi kode program tersebut akan menghasilkan ouput berikut ini :

Perhatikan output dari CallerMemberName atribut yang dipanggil dari constructor, shared constructor dan operator overloading. Output tersebut berbeda dengan hasil dari pemanggilan method dan property.


[Comments]

[Write your comment]
Name (required)
Email (required-will not published)
 
Comment

cxdw
Input code above below (Case Sensitive) :
About Me 
Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Microsoft Certified Trainer | IT Trainer at Native Enterprise | IT Consultant | Software Developer | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.
[Read More...]
Top Download 
Mapping Hak Akses User Pada MenuStrip Sampai Control Button : Downloaded 6083 times  
Bagaimana caranya menginstal database ketika deploying sebuah aplikasi? : Downloaded 4689 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 3554 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 3324 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 2706 times  
Links 
Certifications 
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise 
Follow Me 
Facebook   LinkedIn   Twitter
Syndication 
Hosted By 
Native Enterprise News 
© Copyright 2006-2016   Rully Yulian MF   All rights reserved.