[英]Constructor with arguments in C#
C#問題:我如何使用構造函數:
AcctHolder ah1 = new AcctHolder("Dumitru", "St", "Bucharest");
並且能夠獲得ah1.Fname
? (而不是null)
using System;
namespace ConsoleApplication1
{
class ATM
{
public static void Main(string[] args)
{
AcctHolder ah1 = new AcctHolder("Dumitru", "St", "Bucharest");
Console.WriteLine(ah1.FName); //returns null - why???
AcctHolder ah2 = new AcctHolder();
ah2.FName = "Dumi";
Console.WriteLine(ah2.FName); // returns "Dumi"
Console.ReadKey();
}
public class AcctHolder
{
private string fname, lname, city;
public string FName { get; set; }
public string LName { get; set; }
public string City {
get { return city; }
set { city = value; }
}
public AcctHolder(string a, string b, string c)
{
fname = a;
lname = b;
city = c;
}
public AcctHolder()
{
}
}
}
}
返回null - 為什么???
因為您正在構造函數中初始化不相關的字段而不是屬性的支持字段。 您不需要具有自動實現的屬性 :
public class AcctHolder
{
public string FName { get; set; }
public string LName { get; set; }
public string City { get; set; }
public AcctHolder(string a, string b, string c)
{
FName = a;
LName = b;
City = c;
}
public AcctHolder()
{
}
}
如果要保留支持字段:
public class AcctHolder
{
private string fname;
public string FName
{
get { return fname; }
set { fname = value; }
}
private string lname;
public string LName
{
get { return lname; }
set { lname = value; }
}
private string city;
public string City
{
get { return city; }
set { city = value; }
}
public AcctHolder(string a, string b, string c)
{
fname = a;
lname = b;
city = c;
}
public AcctHolder()
{
}
}
您在構造函數中設置了錯誤的(私有) fname
。 使用公共的 。
更改
public AcctHolder(string a, string b, string c)
{
fname = a;
lname = b;
city = c;
}
至
public AcctHolder(string a, string b, string c)
{
Fname = a;
LName = b;
City = c;
}
在構造函數中,設置
FName = a;
代替
fname = a;
屬性FName
和LName
不需要支持字段的bo,因為你正在使用get;set;
-syntax宣布他們。 它們會自動獲取,因此您可以完全從代碼中刪除fname
和lname
。
由於您使用autoproperties,您不需要私有字段。 簡化:
public class AcctHolder
{
public string FName { get; set; }
public string LName { get; set; }
public string City { get;set;}
public AcctHolder(string a, string b, string c)
{
FName = a;
LName = b;
City = c;
}
public AcctHolder()
{
}
}
或者,更改類以使用與City一樣的私有字符串。
public class AcctHolder
{
private string fname, lname, city;
public string FName { get {return fname;} set {fname = value; }
public string LName { get {return lname;} set {lname = value;} }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.