相关疑难解决方法(0)

为什么C#不提供C++风格的"朋友"关键字?

C++朋友关键字允许class A指定class B作为其朋友.这允许Class B访问private/的protected成员class A.

我从来没有读过任何关于为什么这个被排除在C#(和VB.NET)之外的东西.早期StackOverflow问题的大多数答案似乎都说它是C++的一个有用部分,并且有充分的理由使用它.根据我的经验,我必须同意.

在我看来,另一个问题是如何friend在C#应用程序中执行类似的操作.虽然答案通常围绕嵌套类,但它看起来并不像使用friend关键字那么优雅.

最初的设计模式书在其示例中定期使用它.

总而言之,为什么friend缺少C#,以及在C#中模拟它的"最佳实践"方式(或方法)是什么?

(顺便说一句,该internal关键字一样的东西,它可以让所有的整个组件来访问内部的阶级internal的成员,同时friend允许你给某一类的完全访问权限,以正好一个其他类)

c# c++ oop design-patterns friend

205
推荐指数
10
解决办法
6万
查看次数

你能用反射来找到当前正在执行的方法的名称吗?

就像标题所说:反射可以为您提供当前正在执行的方法的名称.

由于海森堡的问题,我倾向于不猜.如何在不改变当前方法的情况下调用一种方法来告诉您当前的方法?但是我希望有人可以在那里证明我的错.

更新:

  • 第2部分:这可以用来查看属性的内部代码吗?
  • 第3部分:性能如何?

最终结果
我了解了MethodBase.GetCurrentMethod().我还了解到,我不仅可以创建堆栈跟踪,而且如果需要,我只能创建我需要的确切帧.

要在属性中使用它,只需使用.Substring(4)删除'set_'或'get_'.

.net reflection

198
推荐指数
10
解决办法
6万
查看次数

如何使用反射获取调用方法名称和类型?

可能重复:
如何找到调用当前方法的方法?

我想编写一个方法来获取调用方法的名称,以及包含调用方法的类的名称.

有可能用C#反射吗?

c# reflection

155
推荐指数
5
解决办法
11万
查看次数

从方法中检索调用方法名称

可能重复:
如何找到调用当前方法的方法?

我在对象中有一个方法,从对象中的许多地方调用.是否有一种快速简便的方法来获取调用此流行方法的方法的名称.

伪代码示例:

public Main()
{
     PopularMethod();
}

public ButtonClick(object sender, EventArgs e)
{
     PopularMethod();
}

public Button2Click(object sender, EventArgs e)
{
     PopularMethod();
}

public void PopularMethod()
{
     //Get calling method name
}
Run Code Online (Sandbox Code Playgroud)

在内部,PopularMethod()我希望看到Main它是否被调用的价值Main......我想看看" ButtonClick"是否PopularMethod()被调用ButtonClick

我在看,System.Reflection.MethodBase.GetCurrentMethod()但这不会让我得到调用方法.我看过这个StackTrace类,但是每次调用该方法时我都不喜欢运行整个堆栈跟踪.

c# reflection methods calling-convention

57
推荐指数
5
解决办法
7万
查看次数

如何确定调用方法和类名?

我目前正在使用内置的TraceListener开发应用程序日志库.这个库将在许多项目中使用,并且应该提供一个简单的界面,我只需要关心将什么内容写入日志文件,而不是如何.

通过使用反射命名空间,我可以找出当前称为日志函数的应用程序(检索执行程序集名称),但我还想要调用日志记录函数的函数和类的名称.

比方说我有:

public static void LogInfo(string vLogText) {
   Trace.WriteLine(
        MethodInfo.GetCurrentMethod().Name
        + this.GetType().ToString() + vLogText);
   }
Run Code Online (Sandbox Code Playgroud)

当我从另一个项目调用时(类:TestClass,方法:TestMethod)

Tracer.LogInfo("log this!")
Run Code Online (Sandbox Code Playgroud)

我希望在日志中看到:

TestClass, TestMethod, log this!
Run Code Online (Sandbox Code Playgroud)

但相反,我得到了

TracerClass, LogInfo, log this!
Run Code Online (Sandbox Code Playgroud)

如何获取父方法和类名?

.net c# reflection logging .net-assembly

38
推荐指数
1
解决办法
6万
查看次数

36
推荐指数
2
解决办法
6万
查看次数

使用来电者信息属性会影响性能吗?

我试图找到以有效的方式记录方法名称的方法,以及速度和可维护性.我想,在.NET 4.5中,除了速度部分之外,呼叫者信息属性仅用于此目的.我觉得这些只是使用的语法糖System.Reflection.MethodBase.GetCurrentMethod()stackTrace.GetFrame(1).GetMethod().Name(来自这里).(或)这些方法是否也具有性能优势?

在C#中,有没有办法在编译时获取方法名称(就像在C++中一样)?

c# performance logging .net-4.5

32
推荐指数
1
解决办法
5958
查看次数

如何跟踪每个调用的方法

我有一个现有项目,我想找出所有正在进行的调用,并可能转储到日志文件中.

我看了一下这个帖子,但没多大帮助.我试过PostSharp,这个例子展示了如何实现它.但我需要为每个darn方法添加一个属性.作为一个现有的项目,有许多方法,这是不可行的选择.

有没有其他方法可以快速跟踪所有拨打的电话?

c# logging trace

25
推荐指数
3
解决办法
2万
查看次数

我如何在C#中获取调用方法

可能重复:
如何找到调用当前方法的方法?

我需要一种方法来了解C#中调用方法的名称.

例如:

private void doSomething()
{
// I need to know who is calling me? (method1 or method2).

// do something pursuant to who is calling you?
} 

private void method1()
{
 doSomething();
}

private void method2()
{
 doSomething();
}
Run Code Online (Sandbox Code Playgroud)

c# reflection

21
推荐指数
2
解决办法
2万
查看次数

如何获取包含调用当前方法的方法的类的名称?

我有一个要求,我需要知道类的名称(ApiController),它有一个方法(GetMethod),由另一个类(OtherClass)的另一个方法(OtherMethod)调用.

为了帮助解释这一点,我希望下面的伪代码片段有所帮助.

ApiController.cs

public class ApiController
{
    public void GetMethod()
    {
        OtherMethod();
    }
}
Run Code Online (Sandbox Code Playgroud)

OtherClass.cs

public class OtherClass()
{
    public void OtherMethod()
    {
        Console.WriteLine(/*I want to get the value 'ApiController' to print out*/)
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

  • 我看过如何找到调用当前方法的方法?答案将获得调用方法(OtherMethod),但不是具有该方法的类(ApiController)
  • 我尝试[CallerMemberName]并使用StackTrace属性,但这些没有得到方法的类名

c#

21
推荐指数
3
解决办法
1835
查看次数