我正在学习c#。在一本书中(Exam Ref 70-483)有一个问题对我来说没什么意义,因为我在任何地方都找不到任何例子。我的理解是消除错误的答案,而正确的答案必须在那里。
- 你在你的类中有一个私有方法,你想让某些调用者调用这个方法成为可能。你是怎么做的?
。将方法设为public
B。使用事件,以便在方法执行时可以通知外部用户。
C。使用将委托返回给授权调用方的方法。
D。将私有方法声明为lambda。
正确答案"C":"方法可以查看调用者是否被授权,然后返回一个委托给可以随意调用的私有方法。"
这方面的例子是什么?他们所说的授权来电者是什么意思?本子里没有提到授权来电者。我能找到的关于委托和方法授权的唯一东西是关于WCF和授权的,但这肯定超出了这里的范围。好。我希望有人能解释一下!有很多这样的难题……好吧,如果不是很难的问题,很难理解的答案。
下面是如何实现answer 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!"
}
答案真的很模糊,而"正确"的答案在架构方面没有意义。"授权来电者"没有上下文就没有意义。但是,我们可以用消去法。
- 将方法设为public
这让每个人都调用它,所以它是错误的。
- 使用事件,以便在方法执行时可以通知外部用户。
- 使用将委托返回给授权调用方的方法。
- 将私有方法声明为lambda。
这与调用方法无关,它只是一个分散注意力的答案。错误的
如果我们假设"授权的呼叫者"是指"某些呼叫者",那么这是可能的。
这是您为限制对方法的访问所做的部分,但实际上并不做任何事情。所以,这并不能解决问题。
所以#3(或C)是正确的。这个问题真的是一个不好的问题,并且没有一个真正明确的答案。"答案"本质上与问题是一样的,没有更多的细节。
对于你关于"授权来电者"的问题,它没有指定(这也是我在这个问题上遇到的问题)。除了逐字逐句地回答(不是技术意义上的),你没有什么可以研究的。就像我说的,答案本质上和问题是一样的,这不是一个真正的答案。我把它等同于"1 + 1等于多少?"答案:1 + 1"