×

Loading...
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务

大猫面试题,只要static int classIndex = 0; 挪个位置结果就是1,2,3了. 我还要说一句,这个问题是微软编译器的bug,既然是静态,就是应该全局静态。不管我写在哪里,他就是应该只有一个阴死疼死

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{

static int classIndex = 0;

static void Main(string[] args)
{
ClassA<string> x1 = new ClassA<string>("I am here");
ClassA<int> x2 = new ClassA<int>(20);
ClassA<DateTime> x3 = new ClassA<DateTime>(DateTime.Now);

Console.WriteLine(x1.MyIndex);
Console.WriteLine(x2.MyIndex);
Console.WriteLine(x3.MyIndex);
}
}

public class ClassA<T>
{
public T Item
{
get;
set;
}

public int MyIndex
{
get;
set;
}

public ClassA(T source)
{
Item = source;
MyIndex = classIndex++;
}


}
}
Report

Replies, comments and Discussions:

  • 工作学习 / 学科技术讨论 / 大猫面试题,只要static int classIndex = 0; 挪个位置结果就是1,2,3了. 我还要说一句,这个问题是微软编译器的bug,既然是静态,就是应该全局静态。不管我写在哪里,他就是应该只有一个阴死疼死
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication1
    {
    class Program
    {

    static int classIndex = 0;

    static void Main(string[] args)
    {
    ClassA<string> x1 = new ClassA<string>("I am here");
    ClassA<int> x2 = new ClassA<int>(20);
    ClassA<DateTime> x3 = new ClassA<DateTime>(DateTime.Now);

    Console.WriteLine(x1.MyIndex);
    Console.WriteLine(x2.MyIndex);
    Console.WriteLine(x3.MyIndex);
    }
    }

    public class ClassA<T>
    {
    public T Item
    {
    get;
    set;
    }

    public int MyIndex
    {
    get;
    set;
    }

    public ClassA(T source)
    {
    Item = source;
    MyIndex = classIndex++;
    }


    }
    }
    • 静态是否应该是全局静态,这个得微软来定。用的人只能跟着走。
      • 静态变量应该一直是某个class的静态变量。所以我们使用它时都是XXclass.xxstaticField,这点无论Java还是.net都是一致的。要想用全局静态,应该用单独的class实现Singleton pattern吧。
        大猫那道题不妨把传入的不同的泛型看成不同的class。int,string和DateTime就是三个class,调用时生产成三个不同类型的instances。在大猫的例子里,static field是属于这三个不同类型的instances的,实际上是三个static fields。它们相互独立,所以结果是0,0,0。
        而楼主的静态变量是class Program的,这个class是明确的,不会有不同类型的instances产生,所以他的变量是唯一的,多次调用后结果即为1,2,3。

        希望我没说错。

        当然看到结果分析原因要容易很多。用这做考题,还不能上机debug,有点不容易。这适合刚身经百战的学生做。记得上大学是时常常画内存的分配图。而好像老程序员都喜欢边debug边想原因,没人去画内存图了。
        我认同你说的 "用的人只能跟着走", 尽量去理解其意图。