1.Graphics g=new Graphics()
为什么编译时会提示未定义构造函数?
如果没有显式定义,会有一个默认的;如果不可访问,会提示受保护级别限制
未定义构造函数是什么意思?
如果自己要写一个类,编译时也提示这样的错误,该怎么写?2.抽象类能不能实例化?
构造函数肯定是不行的
但方法似乎可以,比如Image是抽象类,仍可以用Image.FromFile来实例化
这样的方法是怎么写出来的?
如果自己要写一个抽象类,能写出这样的方法吗?

解决方案 »

  1.   

    第一个很好实现。基本原理就是自己搞个Constructor,让你访问不了,就好了。比如说,将你的构造函数的访问修饰符设置为private。后面一个也是不可能的。抽象类如果能实例化,那就不叫抽象类了。你执行一下下面这句代码就好了。
    MessageBox.Show(Image.FromFile("DSC02777.JPG").GetType().ToString());
      

  2.   

    楼上的,第一个如果设置为Private的话,会提示“受保护级别限制”。。而不是楼主说的“未定义构造函数”。。
    楼主应该是自己遇到了这个问题,来问问原因的。这个问题肯定是其它代码有问题,导致了这个提示,我就遇到过了,原因没刻意去记。楼主没把其它代码贴出来,所以我不能判断哈。
      

  3.   

    抽象类不能实例化,抽象函数没有执行代码,必须在非抽象的派生类中重写,但是抽象类中可以定义成员的签名,甚至可以为成员字段使用=<value>来提供初始值
      

  4.   

    Image.FromFile不是实例化Image,而是返回一个Image的子类。重新从基础开始看吧
      

  5.   

    System.Drawing.Graphics这个类,一般都只能通过这样来得到实例
    //...
    Form f;
    Graphics g=f.CreateGraphics();
    另外关于使用抽象类问题,它通过使用实现它的子类的实例来使用.如下:public abstract class A{
    //...
    }
    class B:A{
    //...
    }
    class App{
      A a=new B();
      //然后可以 a.xx 等
    }