C# 你应该在什么时候理解参考资料?

C# 你应该在什么时候理解参考资料?,c#,pointers,C#,Pointers,在一次初级程序员面试中,我问了这样一个问题: var instance1 = new MyObject{Value = "hello"} var instance2 = instance1; instance1.Value = "bye"; Console.WriteLine(instance1.Value); Console.WriteLine(instance2.Value); 申请人以“您好”、“再见”作为输出 我的一些同事说“指针”不再那么重要,或者这个问题不是对能力的真正判断 他

在一次初级程序员面试中,我问了这样一个问题:

var instance1 = new MyObject{Value = "hello"}
var instance2 = instance1;

instance1.Value = "bye";

Console.WriteLine(instance1.Value);
Console.WriteLine(instance2.Value);
申请人以“您好”、“再见”作为输出

我的一些同事说“指针”不再那么重要,或者这个问题不是对能力的真正判断

他们说得对吗


编辑:有人指出MyObject可能是一个结构。这是一个很好的观点。然而,我没有发布我给受访者的全部问题。完整问题的类显然是一个类(而不是结构)。可以找到。

他们完全错了。此外,这是一个关于引用的问题,而不是指针的问题。如果你得不到它,你就不应该得到一份写C#的有偿工作。

这真的是基本的东西。问题甚至不是指针,而是C#中的引用语义,这是语言最重要的方面之一。任何自称C#程序员的人都必须明白这一点。

在你离开大学之前,你应该早就了解指针和参考资料

在注意到这个问题被标记为C#之前,我写了上面的内容

你不需要知道任何关于C语言程序指针的知识。尽管如此,我还是坚持我最初的陈述,即作为一名专业程序员


此外,正如其他人所说,这个问题实际上是关于参考文献的。作为一名C#程序员,你真的必须理解引用。

了解对象引用在C#中的工作原理,我认为这很重要。 (一个人毫无疑问可以在不知道任何东西的情况下生存很长一段时间……但你很少愿意为OO代码买单)


另一方面,指针并不是那么多。

在开始进行C#面试之前,你应该了解参考资料。

通过这个问题并不能说明一个人的能力有多强,但不通过这个问题说明这个人缺乏能力。理解引用与值语义是了解如何编程的基础


如果一个人对程序的行为方式有错误的认识,那么他最多只能做“意外编程”。当事情出错时,他将无法找出事情出错的原因。

我认为这是一个公平的问题

尽管如此,请确保不要简单地以通过/不通过为基础给这个问题打分。接着问“为什么?”和“line'instance1.Value=“再见”到底是什么意思”;
'或行'var instance2=instance1;'实际做什么?'启动一个关于引擎盖下发生了什么的对话框。你将通过候选人的转化程度以及他们是否能够理解你的解释来了解他们。

如果候选人不能回答这个问题,说明他们对C#的基本知识非常缺乏。给他们开门,说再见

即使你不使用指针和不安全的代码,你肯定应该理解这个概念并知道如何使用它。 如果你要在C#中工作,我可以原谅你不知道指针算法,因为你很可能不会使用它,也很可能不应该使用它。 但即使是在有管理的C#世界,指针也存在于我们周围

这两个变量中的一个实际上是指针(Reference.Whatever.Same thing)。哪一个?老实说,一个不知道这一点的人需要用C找一份工作一年,之后他肯定会明白这一点

想象一下,这个家伙不得不写一个函数,它接受一个ref字符串。它是:

  • 不变的
  • 对不可变对象的引用
  • 对不可变对象的引用。(不可变性与指针无关。如果它是不可变的,则会更加混乱^)
  • 如果他事先没有在C中失去童贞,他会发疯的。甚至更糟糕的是,假设您的代码的某个关键部分使用了一个类中包含一些有价值信息的字典,而这家伙更改了其中一个值,从而更改了对象的GetHashValue,并导致您“丢失”实例

    即使理智的C#开发人员在代码中不使用显式指针,但这并不意味着指针没有隐式使用

    每一个优秀的程序员都需要准确地理解他们的语言抽象出了什么,否则他将永远无法正确地理解语言。要正确地使用C语言,您需要了解C语言,要正确地使用C语言,您需要了解汇编语言

    还有,你的问题——据你所知,你的受访者假设我的对象是一个结构。他很可能没有,但仍然如此。
    编辑:是的,与指针不同,引用不是固定的。但从概念上讲,这并没有什么区别

    我的一些同事说“指针”不再那么重要了

    理解引用语义和值语义之间的差异至关重要。它是语言和类型系统设计的基础。理解引用可以用指针实现对入门级C#程序员来说并不特别重要;理解通过引用复制和通过值复制之间的区别是非常相关的

    或者这个问题不是对能力的真正判断

    这取决于你要测试的能力。如果快速准确地预测琐碎C#程序行为的能力与你的工作相关,那么我认为这是一个很好的能力测试

    如果判断什么时候没有足够的信息来解决问题,并提出正确的问题来获取信息的能力是相关的,那么是的,这是对相关能力的判断。(一个好的候选者会要求查看myObject类型和member Value的实现,而不是假设myObject是一个类,Value是string类型的可变属性。)

    我说所有这些能力都是相关的,这是一个
    string s = "abc"  
    int a = 3;