比如有個類A,我在類B,C中實體化了類A,那我有方法在類A中獲得是類BC這兩個類實體化它嘛?
uj5u.com熱心網友回復:
如果是除錯需要,可以在A的建構式下設個斷點,然后看它的呼叫堆疊(Call Stack)。你也可以試試用Environment.StackTrace來得到呼叫堆疊。
以上回復針對除錯用途,不是鼓勵你作為代碼邏輯來用。
uj5u.com熱心網友回復:
可以使用一個shared變數和建構式配合使用記錄所有的實體,不過缺點是要注意垃圾回收的處理uj5u.com熱心網友回復:
謝謝你的回復,這個我能想到,我并不想要傳進值,只想要一new就能獲得。就好像表單拖入控制元件一樣自動名稱有name1name2這種
uj5u.com熱心網友回復:
不要傳值啊,寫在無引數建構式里
uj5u.com熱心網友回復:
可以用委托或事件,比如在類A的建構式 New(byval ClsName)中觸發事件,而ClsName就是實體化A的類名uj5u.com熱心網友回復:
這個很簡單,獲取一下呼叫方堆疊就可以了。獲取個數和文本資訊:
Imports System.Reflection
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim m As New caller
Dim m1 As New caller
MsgBox(callee.callInfo.Count) '被實體化次數
End Sub
End Class
Public Class callee
Public Shared callInfo As New List(Of String)
Sub New()
Dim trace As New StackTrace
Dim callerlst As String = String.Empty
For i As Integer = 0 To trace.FrameCount - 1
callerlst += trace.GetFrame(i).GetMethod.ReflectedType.FullName & vbCrLf
Next
If callerlst <> String.Empty Then
callInfo.Add(callerlst)
End If
End Sub
End Class
Class caller
Dim a As New callee
End Class
或者不要文本資訊,直接保存呼叫者吧:
Imports System.Reflection
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim m As New caller
Dim m1 As New caller
MsgBox(callee.callInfo.Count) '被實體化次數
End Sub
End Class
Public Class callee
Public Shared callInfo As New List(Of MethodBase)
Sub New()
callInfo.Add((New StackTrace).GetFrame(1).GetMethod)
End Sub
End Class
Class caller
Dim a As New callee
End Class
uj5u.com熱心網友回復:
GetFrame(1)是直接呼叫者,(2)就是呼叫者的呼叫者。。。。。以此類推。。。
uj5u.com熱心網友回復:
GetFrame(1)
是直接呼叫者,(2)就是呼叫者的呼叫者。。。。。以此類推。。。
謝謝大佬,看來除了通過共享變數解決這個問題也沒有其他辦法了。這個回答又讓我學到了新的知識,就給大佬分了,辛苦了。
uj5u.com熱心網友回復:
怎么給分
第一次發帖
uj5u.com熱心網友回復:
謝謝樓主!!!uj5u.com熱心網友回復:
需要在A類上添加追蹤代碼,成本太大,不太可能好用。比如:A類被參考幾次尚可追蹤,參考到幾十次就非常困難了。uj5u.com熱心網友回復:
如果是除錯需要,可以在A的建構式下設個斷點,然后看它的呼叫堆疊(Call Stack)。你也可以試試用Environment.StackTrace來得到呼叫堆疊。
以上回復針對除錯用途,不是鼓勵你作為代碼邏輯來用。
uj5u.com熱心網友回復:
如果是除錯需要,可以在A的建構式下設個斷點,然后看它的呼叫堆疊(Call Stack)。你也可以試試用Environment.StackTrace來得到呼叫堆疊。
以上回復針對除錯用途,不是鼓勵你作為代碼邏輯來用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/71732.html
標籤:VB.NET
下一篇:c#
