是否有可能在C#中知道谁调用了静态属性/访问器?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了是否有可能在C#中知道谁调用了静态属性/访问器?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2098字,纯文字阅读大概需要3分钟。
内容图文
![是否有可能在C#中知道谁调用了静态属性/访问器?](/upload/InfoBanner/zyjiaocheng/770/b0b134fcdc6f4413ac99e486ceb1663a.jpg)
我的代码:
public class CLASS_A {
public static Dictionary<int, CLASS_A> List = new Dictionary<int, CLASS_A>;
public static PP_CLASS pp = null;
public static CLASS_A ID
{
get
{
int key = get_threadID;
if (List.ContainsKey(key))
return List[key];
else
return null;
}
set
{
int key = get_threadID;
List[key] = value;
}
}
public virtual void init(lib, name)
{
...
if (name != "")
{
if (pp == null)
PP = this;
}
...
}
}
所以无论哪个线程调用init,它的id都用于存储它(无论谁调用).我的列表看起来像这样:
45 = CLASS_A_object0
67 = CLASS_A_object1
...
但是现在当一个不同的线程在pp上调用一个方法时,比如CLASS_A.pp.setWelcome,这将为pp返回null,并抛出null异常!因为当调用set时,线程id将不同,并且不会在列表中.
那么有可能我知道哪个对象被调用以便我可以进行反向查找吗?或者可能是另一种解决方案
为什么我要这个:
最初我们连接到一台设备,这样就可以了.现在有多个设备,每个设备都有自己的ip /端口.初始代码只有公共静态PP_CLASS pp = null;所以其他人只会使用类名调用pp上的方法,事情很好.
以前的行为:软件从文件中选择设备列表,因为pp是静态的,它只与第一个设备通信.我添加了pp == null line,我忘记了我的帖子.因此,当代码启动时,pp == null将为真,并且第一个设备已分配,但现在对于其他设备,pp == null将为false,因此我无法与其他设备通信.
如果需要更多详细信息,请与我们联系.
解决方法:
从C# 5.0(2012年8月)开始,有一个新功能“Caller Info Attribute”.如果您的类存储在单独的文件中,则可以使用CallerFilePathAttribute来注册实际调用的类.
MSDN的例子:
// using System.Runtime.CompilerServices
// using System.Diagnostics;
public void DoProcessing()
{
TraceMessage("Something happened.");
}
public void TraceMessage(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0)
{
Trace.WriteLine("message: " + message);
Trace.WriteLine("member name: " + memberName);
Trace.WriteLine("source file path: " + sourceFilePath);
Trace.WriteLine("source line number: " + sourceLineNumber);
}
// Sample Output:
// message: Something happened.
// member name: DoProcessing
// source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
// source line number: 31
内容总结
以上是互联网集市为您收集整理的是否有可能在C#中知道谁调用了静态属性/访问器?全部内容,希望文章能够帮你解决是否有可能在C#中知道谁调用了静态属性/访问器?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。