相关疑难解决方法(0)

如何找到调用当前方法的方法?

登录C#时,如何学习调用当前方法的方法的名称?我知道所有这些System.Reflection.MethodBase.GetCurrentMethod(),但我想在堆栈跟踪中向下迈出一步.我考虑过解析堆栈跟踪,但我希望找到一种更清晰,更明确的方法,比如Assembly.GetCallingAssembly()方法.

.net c# logging system.diagnostics stack-trace

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

什么时候应该在C++中使用'friend'?

我一直在阅读C++常见问题,并对该friend声明感到好奇.我个人从未使用它,但我有兴趣探索这种语言.

什么是使用的好例子friend


阅读常见问题更长一点我喜欢<< >>运算符重载的想法,并添加为这些类的朋友.但是我不确定这是如何不破坏封装的.这些例外何时可以保持在OOP的严格范围内?

c++ oop encapsulation friend

343
推荐指数
11
解决办法
16万
查看次数

什么是C#相当于朋友?

可能重复:
为什么C#不提供C++风格的'friend'关键字?

我希望类的私有成员变量可以被Tester类访问,而不会将它们暴露给其他类.

在C++中,我只是将Tester类声明为朋友,如何在C#中执行此操作?有人能举个例子吗?

c#

175
推荐指数
5
解决办法
19万
查看次数

什么是私人界面?

前一段时间,面试官在接受采访时问我"你会用什么私人接口?".

我问他是否意味着他回答否的隐式与显式接口实现之间的区别.

所以我想知道:

  1. 他是什么意思?
  2. 您将使用私有界面?

c#

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

limit方法只能由特定类调用

我希望一个类中的特定方法只能由特定类访问.例如:

public class A
{
  public void LimitedAccess() {}
  public void FullAccess() {}
}

public class B
{
  public void Func()
  {
     A a = new A();
     a.LimitedAccess();       // want to be able to call this only from class B
  }
} 

public class C
{
  public void Func()
  {
     A a = new A();
     a.FullAccess();           // want to be able to call this method
     a.LimitedAccess();        // but want this to fail compile
  }
} 
Run Code Online (Sandbox Code Playgroud)

是否有可用于强制执行此操作的关键字或属性?

更新:

由于现有的系统复杂性和时间限制,我需要一个低影响力的解决方案.我想在编译时指出无法使用LimitedAccess().我相信Jon Skeet的答案正是我所要求的无法在C#中完成.

这个问题和乔恩的回答对那些可能会遇到这个问题的人有好处.事实上,这种设计气味可以让任何人选择这样的东西作为理想的解决方案. …

c#

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

在C#4.0中,有没有办法让一个类的私有成员只能用于特定的其他类?

我们正在创建一个对象层次结构,其中每个项目都有一个其他项目的集合,每个项目也有一个Parent指向其父项目的属性.很标准的东西.我们还有一个ItemsCollection继承自的类,该类Collection<Item>本身具有Owner指向集合所属项的属性.再一次,没有什么有趣的.

当一个项目被添加到ItemsCollection类中时,我们希望它自动设置Item的父项(使用集合的Owner属性),当项目被删除时,我们想要清除父项.

这就是事情.我们只希望Parent设置器可用ItemsCollection,没有别的.这样,我们不仅可以知道项目的父项是谁,还可以通过检查现有值Parent,或者让某人随意将其更改为其他项目来确保项目不会添加到多个集合中.

我们知道如何做到的两种方式是:

  1. 将setter标记为private,然后将集合定义包含在项目本身的范围内.亲:全面保护.Con:嵌套类的丑陋代码.

  2. ISetParent在仅ItemsCollection知道的Item上使用私有接口.亲:更清晰的代码,易于遵循.Con:从技术上讲,任何了解界面的人都可以投射Item并获得制定者.

现在技术上通过反思任何人都可以得到任何东西,但仍然......试图找到最好的方法来做到这一点.

现在我知道有C++中的功能,称为Friend什么,让你在一个类中指定的,否则私有成员为可用于另一这将是很好的方案,但我不知道在C#中的任何这样的事情.

在伪代码中(例如,所有属性都更改了通知,为了简洁而删除了这些通知,我只是在这里输入,而不是从代码中复制),我们有...

public class Item
{
    public string Name{ get; set; }
    public Item Parent{ get; private set; }
    public ItemsCollection ChildItems;

    public Item()
    {
        this.ChildItems = new ItemsCollection (this);
    }
}

public class ItemsCollection : ObservableCollection<Item>
{
    public ItemsCollection(Item owner)
    {
        this.Owner = owner;
    }   

    public Item …
Run Code Online (Sandbox Code Playgroud)

c# private friend parent-child

20
推荐指数
4
解决办法
2651
查看次数

C#中的朋友类用例的解决方法

请考虑以下代码模式:

// Each foo keeps a reference to its manager
class Foo
{
    private FooManager m_manager;
}

// Manager keeps a list of all foos
class FooManager
{
    private List<Foo> m_foos;
}
Run Code Online (Sandbox Code Playgroud)

问题:没有办法创建一个新的Foo并更新FooManager中的m_foos列表和新Foo实例中的m_manager引用,而不公开公开一些私有(并冒着某人用实际Foos取消列表的风险).

例如,可以在Foo中实现构造函数Foo(FooManager manager).它可以设置m_manager引用,但无法访问m_foos列表.或者您可以在管理器中实现CreateFoo()方法.它可以访问m_foos列表,但无法在Foo中设置m_manager.

在C++中,显然会声明FooManager是Foo的朋友来表达设计意图,但这在C#中是不可能的.我也知道我可以让Foo成为FooManager的内部类以获得访问权限,但这也不是一个解决方案(如果Foo可以属于多个经理类怎么办?)

顺便说一句.我知道.NET中的"内部"访问,但它要求Foo和FooManager独立存在于一个单独的程序集中,这是不可接受的.

没有公开私有东西的任何变通办法吗?

.net c#

12
推荐指数
1
解决办法
1420
查看次数

C#等同于C++好友关键字?

我是C#的新手,我有一个问题,在C++中我通常会使用friend标识符.现在我知道friendC#中不存在关键字,但我没有任何解决方法的经验(除了将所有类变量设为公共属性,如果可以的话我想避免使用).

我有以下场景:

public class A 
{
    public string Info { get; set; }
    /* much more data */
}

public class B
{
    private A m_instanceOfA;

    public B(A a) { m_instanceOfA = a; }

    public Info { get return A.info; set A.Info  = value; }

    /* And some more data of its own*/
}

public class C
{
    private A m_instanceOfA;

    // I need a constructor of C, which needs to set C.m_instanceOfA
    // to the …
Run Code Online (Sandbox Code Playgroud)

c# oop friend

8
推荐指数
2
解决办法
9901
查看次数

私有方法与C++中的Lambda相比

我的问题是:

使用lambda表达式与私有方法

现在lambda仿函数是C++的一部分,它们可以用来整理类的接口.lambda如何使用vs私有方法在C++中使用compare?unclutter类接口是否存在更好的替代方案?

c++ c++11

5
推荐指数
2
解决办法
1646
查看次数

私有方法?

在我的项目中,我经常想要一个私有的方法(或者你喜欢的函数),但是我也希望从其他类中访问它.这有可能吗?

为了澄清,这个方法可以从ClassA它自己的类访问,但不能从任何其他类访问.

c# methods private

5
推荐指数
1
解决办法
115
查看次数

共同朋友课程的C#解决方法

因此,我有一个与用例相似的用例,但还有一些其他细节,我认为值得提出一个新问题。(相关 问题,以供参考)

我正在写一个实现循环的数据结构。基本设计是这样的:

public class Cycle<T>
{
    public Node<T> Origin { get; private set; }
    public int Count { get; private set; }
}

public class Node<T>
{
    public Cycle<T> Cycle { get; private set; }
    public Node<T> Next { get; private set; }
    public Node<T> Previous { get; private set; }
    public T Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,我要实现以下所有行为:

  1. 更新Cycle.Count作为插入/删除节点的次数
  2. 允许一个“空” Cycle(即Origin = null)创建一个新NodeOrigin …

c# encapsulation friend inner-classes

4
推荐指数
1
解决办法
220
查看次数

想要使用的朋友访问修饰符在哪里?

我见过Friend修饰符的唯一地方是在WinForms设计器中,为什么修改器在Winforms中设置为Friend?VB.NET:'朋友'修饰符有什么作用?.

朋友修饰符似乎是一个几乎任意宽的访问级别,是为解决VB中的一些历史性架构问题而创建的,我只是想知道是否有人有意义的继续使用它?

我有一些愿望只将方法暴露给给定的命名空间,以便将相关的对象集合的功能集合在一起并管理它们的任何非线程安全方法,同时将安全的公共方法暴露给更广泛的范围.同一个集会.朋友没有此访问级别.可能是一个必然的问题,那就是我对程序集和命名空间的使用与预期的不一致?

在许多情况下,由于程序集具有严格的层次结构,因此无法将功能分离到不同的程序集中,从而导致具有相互但不同的对象组,这些对象可以访问彼此不安全的方法.

编辑: 虽然我知道修饰符的功能,但我很好奇人们对它的实际目的,因为我没有遇到过这样一个合适的解决方案.

vb.net access-modifiers friend

3
推荐指数
1
解决办法
4442
查看次数

C# 中的 protected 和 private protected 有什么区别?

C# 中“受保护”和“私有受保护”访问修饰符有什么区别?有人可以举例说明吗?

提前致谢。

c# access-modifiers

2
推荐指数
1
解决办法
3402
查看次数