C#泛型 - 奇怪的面试问题

时间:2009-10-22 22:47:04

标签: c# generics

一位采访者称我“ Genrics不完全是Genrics ”,

他提供了示例(参数int k,int d不是通用的)

public static void PrintThis<T>(T a, T b, T c, int k,int d)
{

}

他问我,如果我证明它仍然是泛型,我将被允许接受下一轮。 我不知道他对我的期望是什么,以及通过展示这样的榜样他的真正含义。

指导我如何巧妙地面对如此奇怪的采访?

提前致谢。

13 个答案:

答案 0 :(得分:23)

有些人很疯狂。你应该微笑并点头。

答案 1 :(得分:13)

day ...做梦......在......电脑......

“你有没有问他这个问题?”

“是”

“他告诉你这是BS吗?”

“否”

“您是否在StackOverflow上找到了他,询问如何回答这个问题?”

“是”

“很好,现在我们知道了。在这里找到下一个人”

“Bwah ......哈......哈......”重复......

答案 2 :(得分:11)

kd始终为int的事实并不会使该方法不那么通用,只是意味着这些参数总是int,而不管类型ab&amp; c

答案 3 :(得分:4)

假设面试问题是真实的,我用谷歌搜索“泛型不是”+ c#,并得到了这些:

  • 泛型不是C ++模板
  • 泛型不仅仅是编译魔术
  • 泛型不协变
  • 泛型不仅仅是一种构造 C#语言;泛型是定义的 与CLR。
  • 泛型不仅限于功能 定义
  • 泛型不仅仅用于 集合
  • 泛型不仅限于类
  • C#做了一种擦除,但确实如此 不像Java那样严厉,而且 原因是因为仿制药不是一个 C#特有的功能,而不是一个 必须在.NET中工作的功能, 它支持多种语言。

我根本没有匹配“泛型不完全通用”或“泛型并不总是通用”。

那么。玩得开心。

答案 4 :(得分:3)

所有泛型都是参数化类型。我不知道你的面试官会得到什么。他是否声称该方法不是完全通用的,因为并非所有方法参数都具有泛型类型?

您不需要对所有参数使用相同的参数类型,也不要求所有参数类型都是通用的。

答案 5 :(得分:3)

也许他的意思是abc必须属于同一类型,但那是愚蠢的。

答案 6 :(得分:2)

就我而言,这是一种通用方法,因为它有一个类型参数。并非所有参数都属于通用类型并不重要。

答案 7 :(得分:2)

  

他问我,如果我证明它仍然是泛型,我将被允许接受下一轮。我不知道他对我的期望是什么,以及通过展示这样的榜样他的真正含义。

听起来这位采访者正在寻找这里给出的答案 - 如果你的问题的措辞能够捕捉到他的意图,那么他并不认为仿制药不是通用的,他会问你是否可以聪明地讨论这个问题的“通用性”。指定的方法。

正如其他几个人所指出的那样,这是一种通用方法,因为它允许用户稍后指定函数的可见属性(在这种情况下,前3个参数的类型)。 k和d是非通用参数的事实似乎只是一个红色的鲱鱼。

能够说明答案会或多或少地证明你没有“泛型”意味着什么的偏斜概念 - 在这种情况下,是泛型函数的调用时特化。

答案 8 :(得分:1)

嗯,迟到了,但迟到总比没有好! : - )

假设你的面试官知道他的东西,这就是面试官要求你做以下事情的那种问题:

  1. 测试你的知识。
  2. 用一个他知道不正确的陈述来测试你,看看你将如何回应它,以及你将如何回答它。
  3. 让您参与辩论,让您放松并畅谈您希望熟悉的主题。
  4. 一位优秀的面试官会取得这三位成绩,而不那么优秀的面试官可能只是在寻找方法试图让你陷入困境,因为他被要求采访过多的候选人。

    在一天结束时,如果你不知道答案或理解这个问题,你最好在面试中这么说,如果你不同意陈述,那就把它看作是一个放松的机会。参与讨论而不是简单地在面试中回答问题。

    对于它的价值,答案是所描述的方法是一种通用方法,无论某些参数是否属于固定类型。证明在声明本身中,通用语法有效地指示编译器允许泛型参数。

答案 9 :(得分:0)

@Udana,面试官是否试图通过问你一个没有意义的问题来试图回应你的回答?

我曾经接受过一次采访,其中测试问题是“winform的默认保证金大小是多少”。我回答“我不知道也不关心,因为我可以在构造函数中设置我想要的任何值”

在采访结束时,采访者告诉我,这个问题是一个诀窍,可以看出谁会猜到谁以及当他们不知道什么时会诚实。

答案 10 :(得分:0)

从字面上理解问题:

  1. 告诉他你可以用T作为字符串,int调用并说一个Button。
  2. 向他展示已编译的通用代码 - 我认为使用ILDASM,您可以看到引用类型的通用方法。您还可以查看值类型的泛型方法的调优版本,但我不记得如何。也许其他人可以。

答案 11 :(得分:0)

嘿,这是一个善良的思维问题,在泛型。面试官只是想知道你对仿制药的熟悉程度。 方法名称中使用的只是在调用方法时指定类型。这可能会或可能不会在通话期间指定。喜欢

PrintThis("a","b", "c", int k,int d) // to specify <T> as string. 

仅在编译时才会执行此操作。所以指定的3个参数只是同一类型。

PrintThis<string> ("a","b", "c", int k,int d) // explicitly specifying the type when you call the method. 

所以我们只是指明它是强类型的。

答案 12 :(得分:0)

我宁愿有兴趣知道他问过的问题或者你在问这个问题之前给出的答案!!!。

一般来说,如果受访者在某个主题中表现出不适,或者给出一些不稳定的答案,那么这些(怪异/模糊)问题会被面试官解雇。这迫使面试官通过交叉询问或询问令人惊讶的事情来让受访者失望。