C#静态上下文用this报错及public构造函数修饰符无效问题求助
问题分析与解决
错误根源
你犯了两个基础语法错误:
- 把
Car类的构造函数写在了Program.Main静态方法内部,这完全不符合C#的类成员定义规则。构造函数必须属于它对应的类(也就是Car类),不能嵌套在其他方法里。 - 静态方法(比如
Main)里没有当前实例,所以this关键字根本没有意义,自然会报错;同时方法内部的代码不能加public这类访问修饰符,这也是语法不允许的。
修正步骤
- 移动构造函数到
Car类内部:把public Car()从Main里拿出来,放到Car类的成员位置。 - 公开
Car类:如果要在其他文件里使用这个类和它的构造函数,需要给Car类加上public修饰符(默认类是internal,只能在同一程序集内访问)。 - 删除
Main里错误放置的构造函数代码。
修正后的完整代码
using System; namespace SimpleClasses { class Program { static void Main(string[] args) { Car myNewCar = new Car(); myNewCar.Make = "toyota"; myNewCar.Model = "Cutlas Supreme"; myNewCar.Year = 1986; myNewCar.Color = "Silver"; Car myOtherCar = myNewCar; Console.WriteLine(myOtherCar.Make); Console.WriteLine("Before: " + myNewCar.Make); doByValue(myNewCar); Console.WriteLine("After By Value: " + myNewCar.Make); doByReference(ref myNewCar); Console.WriteLine("After By Reference: " + myNewCar.Make); static void doByValue(Car car) { car = new Car(); car.Make = "BMW"; } static void doByReference(ref Car car) { car = new Car(); car.Make = "BMW"; } Console.ReadLine(); } } public class Car { public string Make { get; set; } public string Model { get; set; } public int Year { get; set; } public string Color { get; set; } // 构造函数移到这里,public修饰符有效 public Car() { this.Make = "Nissan"; } public double DetermineMarketValue() { return 0.0; } } }
关键点说明
- 现在
public Car()构造函数属于Car类,this关键字可以正常指代当前创建的Car实例,用来初始化Make属性。 public修饰符在Car类和它的构造函数上都有效,这样其他文件只要引用了SimpleClasses命名空间,就能创建Car实例并使用这个构造函数。- 静态方法
Main里不再有无效的this和非法的public修饰符,语法完全合规。
内容的提问来源于stack exchange,提问作者Mohamad Bdeir
相关产品推荐
相关产品推荐

