public int Id { get { return Id; } set { Id = value; } }为什么会报错
时间: 2023-11-01 07:59:17 浏览: 80
这段代码会导致栈溢出错误,因为在 getter 和 setter 中都在不断地调用自己,从而形成了一个无限递归的循环。
应该使用私有字段来存储属性值,例如:
```
private int id;
public int Id
{
get { return id; }
set { id = value; }
}
```
或者使用 C# 6.0 及以上版本中的自动属性:
```
public int Id { get; set; }
```
这样就不会出现栈溢出错误了。
相关问题
The following fragment of C# includes the declarations of some properties:public class Customer{ private int numberOfOrders = 0; public int ID{ get{return numberOfOrders;} set{numberOfOrders = value;} } } Suppose that a variable customer of class Customer has been declared, instantiated and initialised. Write statement(s) in C#, using the properties, that will increase the customer’s number of orders by 1.
The provided code declares a property `ID` which actually gets and sets the `numberOfOrders` field. To increase the number of orders by 1, you should modify the `numberOfOrders` field directly. Here is the C# statement to increment the `numberOfOrders` field by 1:
```
customer.ID += 1;
```
This code will call the `set` accessor of the `ID` property and pass the incremented value of `numberOfOrders` to it, which will update the `numberOfOrders` field accordingly.
public class Account { public static string accountNumber; public static string pin; public static double availableBalance; public static double totalBalance; public Account() { accountNumber = "2202010744"; pin = "123456"; availableBalance = 5000.00; totalBalance = 5000.00; } public static string Pin { get { return pin; } set { pin = value; } } public static string AccountNumber { get { return accountNumber; } } public static double AvailableBalance { get { return availableBalance; } set { availableBalance = value; } } public static double TotalBalance { get { return totalBalance; } set { totalBalance = value; } } //public bool ValidatePin(int userPIN) //{ // return (userPIN == pin); //} public static void Credit(double amount) { totalBalance += amount; } public static void Debit(double amount) { availableBalance -= amount; totalBalance -= amount; } } static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); LoginPage f2 = new LoginPage(); Application.Run(f2); } },给这段代码加上详细的注释。
注释如下:
```C#
public class Account
{
//账户相关信息
public static string accountNumber; //账户号码
public static string pin; //账户密码
public static double availableBalance; //账户可用余额
public static double totalBalance; //账户总余额
//构造函数,初始化账户信息
public Account()
{
accountNumber = "2202010744"; //默认账户号码
pin = "123456"; //默认密码
availableBalance = 5000.00; //默认可用余额
totalBalance = 5000.00; //默认总余额
}
//账户密码属性,可读可写
public static string Pin
{
get { return pin; }
set { pin = value; }
}
//账户号码属性,只读
public static string AccountNumber
{
get { return accountNumber; }
}
//账户可用余额属性,可读可写
public static double AvailableBalance
{
get { return availableBalance; }
set { availableBalance = value; }
}
//账户总余额属性,可读可写
public static double TotalBalance
{
get { return totalBalance; }
set { totalBalance = value; }
}
//账户加钱方法
public static void Credit(double amount)
{
totalBalance += amount;
}
//账户扣钱方法
public static void Debit(double amount)
{
availableBalance -= amount;
totalBalance -= amount;
}
}
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
LoginPage f2 = new LoginPage(); //创建登录页面对象
Application.Run(f2); //运行登录页面
}
}
```
阅读全文