C#泛型-奇怪的面试问题
一位采访者向我争辩说,“基因并不完全是基因。” 他提供了一个示例(参数int k,int d不是通用的)C#泛型-奇怪的面试问题,c#,generics,C#,Generics,一位采访者向我争辩说,“基因并不完全是基因。” 他提供了一个示例(参数int k,int d不是通用的) publicstaticvoidprintThis(ta,tb,tc,int k,int d) { } 他问我,如果我证明它仍然是泛型,我将被允许进入下一轮。 我不知道他对我有什么期望,也不知道他举这样的例子到底是什么意思 指导我如何巧妙地面对如此奇怪的面试 提前感谢。所有泛型都是参数化类型。我不知道你的面试官是什么意思。他是否声称该方法不是完全泛型的,因为并非所有方法参数都具有泛型类型
publicstaticvoidprintThis(ta,tb,tc,int k,int d)
{
}
他问我,如果我证明它仍然是泛型,我将被允许进入下一轮。
我不知道他对我有什么期望,也不知道他举这样的例子到底是什么意思
指导我如何巧妙地面对如此奇怪的面试
提前感谢。所有泛型都是参数化类型。我不知道你的面试官是什么意思。他是否声称该方法不是完全泛型的,因为并非所有方法参数都具有泛型类型
您不需要对所有参数使用相同的参数类型,也不需要所有参数类型都是泛型的。有些人是疯子。你应该微笑着点头。就我而言,这是一个通用方法,因为它有一个类型参数。并非所有的参数都是泛型的并不重要。事实上
k
和d
总是int
并不意味着该方法的泛型性降低,它只是意味着无论a
的类型如何,这些参数总是int
,b
&c也许他的意思是a
、b
和c
必须是同一类型,但那很愚蠢。假设面试问题是真实的,我在谷歌上搜索了“泛型不是”+c,得到了以下信息:
泛型不是C++模板
- 泛型不仅仅是编译器的魔力
- 泛型不是协变的
- 泛型不仅仅是一个
C语言;泛型是定义的
使用CLR
- 泛型不限于函数
定义
- 泛型不仅仅用于
收藏
- 泛型不限于类
- C#做了一种擦除,但它是
没有Java那么严重,而且
原因是泛型不是一个
C#-特定功能,但更确切地说是
必须跨.NET工作的功能,
它支持多种语言
“泛型并非完全泛型”或“泛型并非总是泛型”,我根本没有找到匹配项
就这样。玩得开心。一天。。。做梦。。。在电脑
“你问他这个问题了吗?”
“是的”
“他告诉过你那是废话吗?”
“没有”
“你发现他在电话里问如何回答这个问题了吗?”
“是的”
“很好,现在我们知道了。让下一个人进来”
“啊…哈…哈…”重复
他问我,如果我证明它仍然是泛型,我将被允许进入下一轮。我不知道他对我有什么期望,也不知道他举这样的例子到底是什么意思
听起来这位面试官在寻找这里给出的答案——如果你对他的问题的措辞符合他的意图,那么他不是在争论泛型不是泛型,而是在问你是否可以明智地讨论特定方法的“泛型”
正如其他几个人所指出的,这是一种通用方法,因为它允许用户在以后指定函数的可见属性(在本例中,是前3个参数的类型)。k和d是非泛型参数这一事实似乎只是一条红鲱鱼
能够说出这个答案或多或少会证明你对“泛型”的含义没有偏见——在这种情况下,泛型函数的调用时间专门化。@Udana,是不是面试官试图通过问你一个毫无意义的问题来衡量你的回答
我曾经接受过一次面试,测试题问“winform的默认边距大小是多少”。我回答说:“我不知道也不在乎,因为我可以在构造函数中设置我想要的任何值”
面试结束时,面试官告诉我,这个问题是一个骗局,目的是看谁会猜,谁会在他们不知道的时候诚实。嗯,迟发,但迟发总比不发好!:-)
假设你的面试官知道他的东西,这是面试官问你的问题,目的是做以下事情:
测试你的知识李>
用他知道不正确的陈述测试你,看看你会如何反应,以及你会如何回答
让你参与辩论,让你放松,自由地谈论一个你希望熟悉的话题
一个好的面试官可以做到这三个方面,而不太好的面试官可能只是想找办法来陷害你,因为他被要求面试太多的应聘者
在一天结束时,如果你不知道答案或不理解问题,最好在面试中这样说。如果你不同意一个陈述,把它看作是一个放松和参与讨论的机会,而不是在面试中简单地回答问题
值得一提的是,答案是所描述的方法是通用方法,不管某些参数是否为固定类型。证明在声明本身中,泛型语法有效地指示编译器考虑泛型参数。从字面上理解问题:
告诉他你可以用T作为字符串,int和一个按钮
向他展示编译后的泛型代码——我认为这是使用ILDASM,您可以看到引用类型的泛型方法。您还可以看到值类型的泛型方法的优化版本,但我不记得是如何实现的。也许其他人可以
嘿,在泛型中,这是一个让人发痒的好问题。面试官只是想知道你对仿制药的熟悉程度。
方法名中使用的方法只是指定t
public static void PrintThis<T>(T a, T b, T c, int k,int d)
{
}
PrintThis("a","b", "c", int k,int d) // to specify <T> as string.
PrintThis<string> ("a","b", "c", int k,int d) // explicitly specifying the type when you call the method.