WPF 判斷呼叫方法堆疊

2021-09-07 20:49:18 字數 3570 閱讀 6705

原文:

wpf 判斷呼叫方法堆疊

最近遇到乙個問題,經常有小夥伴在類a的構造裡呼叫靜態函式b,但是這時b依賴於a的初始化完成,於是就無限迴圈。所以我需要在判斷小夥伴呼叫b時是否在a的構造方法裡,如果是就給他異常。

假設有方法 foo ,如果需要判斷 foo 的呼叫有哪些,可以使用下面的**

public

void

foo()

使用var n = stacktrace.framecount;可以得到當前的棧有幾個,最頂部就是最近呼叫。

例如呼叫是lindexi->a->csdn->foo那麼對應的棧就是下表

序號方法

3lindexi2a

1csdn

0foo

如果要判斷當前的呼叫是建構函式,那麼需要知道,建構函式就是.ctor那麼使用下面的**就可以判斷

var stacktrace = new stacktrace();

var n = stacktrace.framecount

; for (int i = 0

; i < n; i++)

console.writeline(stacktrace.getframe(i).getmethod().name);

}

建議把上面的**複製到乙個專案,自己跑一下就知道了

如果還需要判斷是指定型別的建構函式,那麼需要使用下面的**,下面**判斷是型別gqplugkmoanvp的構造呼叫

public

void

foo()

}console.writeline(stacktrace.getframe(i).getmethod().name);}}

}

實際使用t.issubclassof(typeof(gqplugkmoanvp))有些多餘,但是寫了也可以。因為如果寫在構造,那麼就會先呼叫基類的構造方法,所以已經會出現判斷到基類的構造方法。

例如有下面的類,在構造方法呼叫foo,那麼呼叫堆疊就是foo-a1-a

public

class a1:a

}public

class a

下面是我封裝的乙個方法,用於判斷當前呼叫是否在某個類裡的某個方法

///

/// 檢視呼叫這個方式是否在某個類的某個方法

//////

//////

public

static

bool

checkstackclassmethod(type @class, string method)}}

return

false;

}

**放在wpf 判斷呼叫方法堆疊

因為傳入的型別可能是介面,所以型別判斷就需要加上介面繼承的,所有**已經給了大家。

使用這個方法,可以把判斷是否在某個類的某個方法呼叫這個函式就可以修改為下面**

public

void

foo()

}

我經過測試下使用這個函式,判斷是否我要保護的方法在我不想要被呼叫的類呼叫,如果是就丟擲異常。接著我的朋友的**跑不過,就把我祭天。

感謝 walterlv

最近遇到乙個問題,經常有小夥伴在類a的構造裡呼叫靜態函式b,但是這時b依賴於a的初始化完成,於是就無限迴圈。所以我需要在判斷小夥伴呼叫b時是否在a的構造方法裡,如果是就給他異常。

假設有方法 foo ,如果需要判斷 foo 的呼叫有哪些,可以使用下面的**

public

void

foo()

使用var n = stacktrace.framecount;可以得到當前的棧有幾個,最頂部就是最近呼叫。

例如呼叫是lindexi->a->csdn->foo那麼對應的棧就是下表

序號方法

3lindexi2a

1csdn

0foo

如果要判斷當前的呼叫是建構函式,那麼需要知道,建構函式就是.ctor那麼使用下面的**就可以判斷

var stacktrace = new stacktrace();

var n = stacktrace.framecount

; for (int i = 0

; i < n; i++)

console.writeline(stacktrace.getframe(i).getmethod().name);

}

建議把上面的**複製到乙個專案,自己跑一下就知道了

如果還需要判斷是指定型別的建構函式,那麼需要使用下面的**,下面**判斷是型別gqplugkmoanvp的構造呼叫

public

void

foo()

}console.writeline(stacktrace.getframe(i).getmethod().name);}}

}

實際使用t.issubclassof(typeof(gqplugkmoanvp))有些多餘,但是寫了也可以。因為如果寫在構造,那麼就會先呼叫基類的構造方法,所以已經會出現判斷到基類的構造方法。

例如有下面的類,在構造方法呼叫foo,那麼呼叫堆疊就是foo-a1-a

public

class a1:a

}public

class a

下面是我封裝的乙個方法,用於判斷當前呼叫是否在某個類裡的某個方法

///

/// 檢視呼叫這個方式是否在某個類的某個方法

//////

//////

public

static

bool

checkstackclassmethod(type @class, string method)}}

return

false;

}

**放在wpf 判斷呼叫方法堆疊

因為傳入的型別可能是介面,所以型別判斷就需要加上介面繼承的,所有**已經給了大家。

使用這個方法,可以把判斷是否在某個類的某個方法呼叫這個函式就可以修改為下面**

public

void

foo()

}

我經過測試下使用這個函式,判斷是否我要保護的方法在我不想要被呼叫的類呼叫,如果是就丟擲異常。接著我的朋友的**跑不過,就把我祭天。

感謝 walterlv

WPF呼叫Matlab函式方法

有的時候用c 寫影象處理方法,比較費事,不如matlab簡單,但是matlab又做不出wpf那樣的好看介面,怎麼辦呢。今天正好我要實現這個功能,就順便寫個小例子,給需要的人做個借鑑。想要用wpf呼叫matlab 就用到了matlab生成.dll檔案的功能。注 我的vs版本是2013,matlab版本...

WPF預設模板呼叫方法簡介

wpf中具有一些模板,在學習的過程中我們需要熟練的掌握這些模板的應用。在這裡我們先來了解一下wpf預設模板呼叫的具體方法。最好的模板示例 我們知道每個控制項都有自己預設的模板,這是ms編寫的,如果我們能夠得到這些模板的xaml 那麼它將是學習模板的最好的示例,要想獲得某個控制項ctrl的預設模板,請...

函式呼叫堆疊

一 函式呼叫堆疊 認真體會每一行指令位址!include intsum int a,int b mov ebp,esp 讓esp回退到ebp的位置,回退棧幀的過程中,沒有對棧幀中的值進行清0的操作 pop ebp 出棧並把出棧的值賦給ebp int main 下圖為上面示例函式,程式在sum函式中,...