1.在一个类A中定义个私有变量a,再定义个方法,在该方法中再定义一个对象A test=new A();
为什么这个地方的test能访问私有变量a呢?对对象test来说a不是私有的吗?是不能访问的吗?
2.在一个方法中定义一个对象,并在该方法中为该对象加锁,在锁的生命周期中在调用自己这个方法,会产生死锁吗
3.在一个主线程中定义一个从线程,关闭主线程会关闭从线程吗?或者是在主线程中新建两个线程
a,b 线程a与线程b是没有什么关系的,是吗?1.是可以访问私有变量的
2.不会产生死锁
3.主线程和从线程是有关系的。从线程与从线程之间是没有什么关系的c#

解决方案 »

  1.   

    1.定义的a指的是类的私有变量,每个对象有有属于自己的a。
    A test=new A()
    B test2=new B()A里面的a跟B里面的a是两个东西,虽然名字都一样
      

  2.   

    有一个类叫学生,学生有私有变量学号,
    学生类实例化: 
    学生 张三 = new 学生();
    于是张三具有了学号这个变量.2.3不会 我也是小白.
      

  3.   

      class A
        {
            public static void Display()
            {
                Console.WriteLine("A");
            }
            private string strname;
            public string StrName
            {
                get { return strname; }
                set { strname = value; }
            }
            public A(string name)
            {
                this.strname = name;
            }
            public void print()
            {
                A gg = new A("sfd");
                gg.strname="dfdf";//这个地方为什么能访问私有变量?
                this.strname = "dfdf";//这个this对象与上面的gg对象有什么关系呢?
            }
    这是第一个问题的代码
        }
      

  4.   

     class A
        {
            public static void Display()
            {
                Console.WriteLine("A");
            }
            private string strname;
            public string StrName
            {
                get { return strname; }
                set { strname = value; }
            }
            public A(string name)
            {
                this.strname = name;
            }
            public void print()
            {
                A gg = new A("sfd");
                gg.strname="dfdf";//这个地方为什么能访问私有变量?
                this.strname = "dfdf";//这个this对象与上面的gg对象有什么关系呢?
            }
    这是第一个问题的代码
        } 
      

  5.   

    1,
            public void print()
            {
                A gg = new A("sfd");
                gg.strname="dfdf";//私有变量在类内部都可以访问。
                  //这个this是你在外部方法new A的时候的那个对象,而gg是你在在new A后的对象调用的print方法的时候重新new A的对象,所以,当你调用了print方法,你new了两个A,this就是调用print方法的那个对象
                 this.strname = "dfdf";//        }2,可能你的问题我理解的不是很清楚。不过锁是针对多个线程争夺资源而设定的,如果你是单个线程,不牵扯死锁的问题,如果多个线程同时遇见lock的对象正在使用,会等正在使用的线程释放lock资源后,才会进行访问,但如果正在使用的线程一直没有给等待线程发送信号释放资源,此时,就可能造成死锁,不过,不只这只是造成死锁的一种情况。
    3,线程是独立的。
      

  6.   

    你可以自己尝试创建在Main函数里打开另一个线程,线程为长时间的Thread.Sleep,确保足够长的时间在运行,如果Main函数没有打开Form的话,将直接结束,你再看看进程是否还在。
      

  7.   

    public void test(int i)
    {
    lock(this)
    {
    if (i>10)
    {
    i--;
    test(i);
    }
    }
    }
    这是第二个问题的代码,死锁不会产生,i变为一个对象的话也不会产生死锁。
    解释是 msdn上 线程可以递归拥有同步块 只是解释的不太清楚,现在想问清楚些~~呵呵
      

  8.   

    form会打开,进程会存在,但是我关闭form,我是看不到所建立的线程的状态的。所以我想问下这个线程会存在吗,线程之间有否有关系?
    我现在的理解是:进程创建(分配资源),同时创建一个主线程,主线程调用进程中的资源,在主线程中建一个次线程,次线程也是调用进程中的资源,当主线程关闭的时候,进程关闭,windows系统释放非配给该进程中的资源,则次线程无法调用资源,也会随之关闭。
    假设线程之间产生了死锁,则无法关闭。这句我不知道是不是正确的
    我这样理解可以吗?
      

  9.   

    你会用任务管理器吗?你会创建控制台程序吗?
    在控制台程序里,新建线程调用,如果控制台程序不添加Console.Read();之类的方法等待用户输入,会直接结束的。任务管理器中监视刚才运行的程序进程,进程还在的话,就说明各个线程是无相独立的。事实上,只要有一个线程不结束,进程就不会结束,各个线程所拥有的资源是独立的。你把进程理解为多个线程的集合就可以了,集合数量为0才会结束。当然,有一种辅助线程,也叫后台线程,是依赖创建它的线程的。任何委托的BeginInvoke创建的都是这类辅助线程,无法单独存在,主线程必须在运行。Thread类也有一个IsBackground,设置是否为后台线程,默认值为false。
      

  10.   

    因为你实例化了类A 而带有private修饰的字段是在类A里面的。所以可以访问。  如果你不想访问可以设置属性啊。class Program
        {
            private string a {set; }
            public Program()
            {
                a = "0.0";
            }
            
            static void Main(string[] args)
            {
                Program c = new Program();
                Console.WriteLine(c.a);//这里c.就访问不到了 - -
                Console.Read();
            }
            public string b()
            {
                return a;
            }
            
        }