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

C#泛型-奇怪的面试问题,c#,generics,C#,Generics,一位采访者向我争辩说,“基因并不完全是基因。” 他提供了一个示例(参数int k,int d不是通用的) publicstaticvoidprintThis(ta,tb,tc,int k,int d) { } 他问我,如果我证明它仍然是泛型,我将被允许进入下一轮。 我不知道他对我有什么期望,也不知道他举这样的例子到底是什么意思 指导我如何巧妙地面对如此奇怪的面试 提前感谢。所有泛型都是参数化类型。我不知道你的面试官是什么意思。他是否声称该方法不是完全泛型的,因为并非所有方法参数都具有泛型类型

一位采访者向我争辩说,“基因并不完全是基因。”

他提供了一个示例(参数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.