1

我正在学习 C#。一本书(Exam Ref 70-483)中有一个问题对我来说意义不大,因为我在任何地方都找不到它的任何例子。我从消除错误答案的角度理解它,正确的答案必须在那里。

  1. 您的类中有一个私有方法,并且您希望某些调用者可以调用该方法。你做什么工作?

A. 公开方法。

B. 使用一个事件,以便在执行该方法时可以通知外部用户。

C. 使用将委托返回给授权调用者的方法。

D. 将私有方法声明为 lambda。

正确答案'C':“该方法可以查看调用者是否被授权,然后返回一个委托给可以随意调用的私有方法。”

这有什么例子?授权来电者是什么意思?书中没有提到授权呼叫者。关于委托和方法授权,我唯一能找到的是关于 WCF 和授权,但这肯定超出了这里的范围。好。我希望有人可以对此有所了解!像这样的棘手问题太多了……好吧,即使不是棘手的问题,也很难理解答案。

4

2 回答 2

4

下面是如何实现答案C的示例。

class Conspirator
{
    private void SecretMethod()
    {
        Console.WriteLine("Secret exposed!");
    }

    public Action GetSecretMethod(long authorizationKey)
    {
        if (authorizationKey == 63278823982)
        {
            return this.SecretMethod;
        }

        return null;
    }
}

如您所见,SecretMethod是私有的。GetSecretMethod返回一个包含对私有方法的引用的委托,但authorizationKey前提是传递的是正确的。当然,这是一种非常基本的“授权”形式,在现实生活中你会有一些其他的授权机制。

您可以通过以下方式使用此类:

void Main()
{
    var conspirator = new Conspirator();

    var secretPrinter = conspirator.GetSecretMethod(63278823982);
    secretPrinter();
    // Prints "Secret exposed!"
}
于 2015-10-23T12:04:37.493 回答
1

答案真的很模糊,“正确”的答案在架构方面没有意义。没有上下文,“授权来电者”实际上没有意义。但是,我们可以通过消除过程来处理它。

  1. 公开方法

这让大家都这么叫,所以是错的。

  1. 使用事件,以便在执行该方法时可以通知外部用户。

这与调用方法无关,只是分散了答案的注意力。错误的

  1. 使用将委托返回给授权调用者的方法。

如果我们假设“授权呼叫者”是指“某些呼叫者”,那么这是一种可能性。

  1. 将私有方法声明为 lambda。

这是您限制对该方法的访问的一部分,但实际上并没有任何事情。所以,它并不能解决问题。

所以#3(或C)是正确的。这个问题真的是一个糟糕的问题,而且没有一个明确的答案。“答案”基本上与问题相同,没有进一步的细节。

对于您关于“授权呼叫者”的问题,未指定(这也是我对这个问题的问题)。除了逐字逐句(不是在技术意义上)回答之外,您无法研究任何内容。正如我所说,答案本质上与问题相同,这并不是真正的答案。我将其等同于“什么是 1 + 1?答案:1 + 1”

于 2015-10-23T12:10:16.830 回答