C# 把一个对象当作构造函数的参数来传递,在方法体外实例化该类时报错

创建了两个类Demo1和Demo2

Demo1里有一个字段sentence:

  public class Demo1
  {
        public string sentence="OK";
  }

Demo2的构造函数需要一个Demo1类型的对象作参数:

 public class Demo2
    {
        string words;
                //构造函数
        public Demo2(Demo1 D)
        {
            words = D.sentence;
        }

        public void write()
        {
            Console.WriteLine(words);
        }
    }

在方法体外部实例化Demo2:

 class Program
    {
        Demo1 D = new Demo1();
        Demo2 D2 = new Demo2(D);
        static void Main(string[] args)
        {
            D2.write();
            Console.ReadKey();
        }
    }

会报错:
字段初始值设定项无法引用非静态字段、方法或属性

求大神们帮忙解惑,谢谢

main方法是静态的,,需要给上面两个变量加上静态修饰符,,如下:

 static  Demo1 D = new Demo1();
       static Demo2 D2 = new Demo2(D);
        static void Main(string[] args)
        {
            D2.write();
            Console.ReadKey();
        }

你再试试。

C#静态方法是一种特殊的成员方法 它不属于类的某一个具体的实例,而是属于类本身。所以对静态方法不需要首先创建一个类的实例,而是采用类名.静态方法的格式 。
1.static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用!
static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是属于整个类!
2.静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。
3.静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存.
4.C#中的方法有两种:实例方法,静态方法.

你的问题在第2条

说错了 是这句 static内部只能出现static变量和其他static方法!而且static方法中还不能使用this....等关键字..因为它是属于整个类!