在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允许你给某一类的完全访问权限,以正好一个其他类)
就像标题所说:反射可以为您提供当前正在执行的方法的名称.
由于海森堡的问题,我倾向于不猜.如何在不改变当前方法的情况下调用一种方法来告诉您当前的方法?但是我希望有人可以在那里证明我的错.
更新:
最终结果
 
我了解了MethodBase.GetCurrentMethod().我还了解到,我不仅可以创建堆栈跟踪,而且如果需要,我只能创建我需要的确切帧.  
要在属性中使用它,只需使用.Substring(4)删除'set_'或'get_'.
可能重复:
如何找到调用当前方法的方法?
我在对象中有一个方法,从对象中的许多地方调用.是否有一种快速简便的方法来获取调用此流行方法的方法的名称.
伪代码示例:
public Main()
{
     PopularMethod();
}
public ButtonClick(object sender, EventArgs e)
{
     PopularMethod();
}
public Button2Click(object sender, EventArgs e)
{
     PopularMethod();
}
public void PopularMethod()
{
     //Get calling method name
}
在内部,PopularMethod()我希望看到Main它是否被调用的价值Main......我想看看" ButtonClick"是否PopularMethod()被调用ButtonClick
我在看,System.Reflection.MethodBase.GetCurrentMethod()但这不会让我得到调用方法.我看过这个StackTrace类,但是每次调用该方法时我都不喜欢运行整个堆栈跟踪.
我目前正在使用内置的TraceListener开发应用程序日志库.这个库将在许多项目中使用,并且应该提供一个简单的界面,我只需要关心将什么内容写入日志文件,而不是如何.
通过使用反射命名空间,我可以找出当前称为日志函数的应用程序(检索执行程序集名称),但我还想要调用日志记录函数的函数和类的名称.
比方说我有:
public static void LogInfo(string vLogText) {
   Trace.WriteLine(
        MethodInfo.GetCurrentMethod().Name
        + this.GetType().ToString() + vLogText);
   }
当我从另一个项目调用时(类:TestClass,方法:TestMethod)
Tracer.LogInfo("log this!")
我希望在日志中看到:
TestClass, TestMethod, log this!
但相反,我得到了
TracerClass, LogInfo, log this!
如何获取父方法和类名?
可能重复:
如何找到调用当前方法的方法?
如何从c#中的被调用函数中获取调用函数名?
我有一个现有项目,我想找出所有正在进行的调用,并可能转储到日志文件中.
我看了一下这个帖子,但没多大帮助.我试过PostSharp,这个例子展示了如何实现它.但我需要为每个darn方法添加一个属性.作为一个现有的项目,有许多方法,这是不可行的选择.
有没有其他方法可以快速跟踪所有拨打的电话?
可能重复:
如何找到调用当前方法的方法?
我需要一种方法来了解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();
}
我有一个要求,我需要知道类的名称(ApiController),它有一个方法(GetMethod),由另一个类(OtherClass)的另一个方法(OtherMethod)调用.
为了帮助解释这一点,我希望下面的伪代码片段有所帮助.
public class ApiController
{
    public void GetMethod()
    {
        OtherMethod();
    }
}
public class OtherClass()
{
    public void OtherMethod()
    {
        Console.WriteLine(/*I want to get the value 'ApiController' to print out*/)
    }
}
我尝试过的:
[CallerMemberName]并使用StackTrace属性,但这些没有得到方法的类名