New VB 11 Caller Information Attribute

Posted at : Aug/23/2012
2664 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
2375
Input code above below (Case Sensitive) :

ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Founder & IT Trainer Native Enterprise | MCT (2008-2019) | MVP (2009-2016) | Xamarin Certified Professional | MTA | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.

[Read More...]

TOP DOWNLOAD

Mapping Hak Akses User Pada MenuStrip Sampai Control Button
downloaded 6982 times

Bagaimana caranya menginstal database ketika deploying sebuah aplikasi?
downloaded 4893 times

Simple Voice Engine Application With Sound Player Class...
downloaded 4045 times

Change Group,Sort Order, Filtering By Date in Crystal Reports
downloaded 3460 times

WinForms DataGrid Paging With SqlDataAdapter
downloaded 2881 times


LINKS

CERTIFICATIONS

Xamarin Certified
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  Facebook  Instagram  LinkedIn   Twitter

RSS


NATIVE ENTERPRISE NEWS

© Copyright 2006 - 2024   Rully Yulian MF   All rights reserved.