C# 修改类成员值
我有一个类和构造函数,以便像这样启动它:C# 修改类成员值,c#,C#,我有一个类和构造函数,以便像这样启动它: public class Merchant { public int userID; public int clubID; public short categoryID; public string posTerminalID; public string name; public double score; public double subClubSharePercent; publi
public class Merchant
{
public int userID;
public int clubID;
public short categoryID;
public string posTerminalID;
public string name;
public double score;
public double subClubSharePercent;
public double simClubSharePercent;
public bool isActive;
public string modificationDatetime;
public Merchant()
{
}
public Merchant(int uID, int cID, Int16 aID, string pID, string n, double s, double sSp, double sCp, Boolean iA, DateTime dt)
{
Date da = new Date();
this.userID = uID;
this.clubID = cID;
this.categoryID = aID;
this.posTerminalID = pID;
this.name = n;
this.score = s;
this.subClubSharePercent = sSp;
this.simClubSharePercent = sCp;
this.isActive = iA;
this.modificationDatetime = da;
}
}
如何修改类成员值:
谢谢。类构造函数只能调用一次。一旦对象被构造,它就被构造了,这就是它(抛开任何通过反射调用构造函数中代码的奇怪尝试) 如果您希望能够在构建类后使用单个方法更改该类的值,则必须编写一个方法来更改该类的值(也许您不希望有人一次只更改一个成员变量?为了线程安全原因,您希望一次全部运行这些变量,对这些变量运行验证?) 如果不希望外部对象能够修改类的值,则可能应该使这些公共属性具有私有集,例如:
public bool isActive { get; private set; }
这将清楚地表明属性可以在类本身之外读取,但不能写入,并防止非成员修改变量
如果希望属性只能由构造函数设置(甚至连成员方法都不能更改),请将它们标记为
只读
。但要知道,要在这里获得新的值,您必须创建一个全新的对象(即,新商户(param,param,param…
)。Dan Field肯定给了您一个充分的答案,但我想我也会加入一些花絮
- 构造函数用于设置开发人员无法设置的变量,包括私有字段、私有函数和私有属性
- 您已经声明了许多公共字段。您知道它们是字段,因为没有“setter”或“getter”函数。但是,属性是通过使用getter和setter函数来定义的。setter和getter不仅仅是一种
现象,它们在许多面向对象语言中都很有用C
- 在
中,程序员可以在必要时设置公共属性-通过构造函数初始化公共属性(少数例外)不一定有用。也就是说,有些模式要求将每个字段传递到构造函数中,这意味着如果没有对象的所有信息,对象就不可能存在。在您的情况下,这显然不是一个问题,因为在C#
中有一个无参数构造函数public Merchant()
还允许在其语法中正确初始化对象,而无需通过构造函数中的参数传入每个属性C#
//Constructor with all parameters
public Merchant(int uID, int cID, Int16 aID, string pID, string n, double s, double sSp,
double sCp, Boolean iA, DateTime dt) {
Date da = new Date();
this.userID = uID;
this.clubID = cID;
this.categoryID = aID;
this.posTerminalID = pID;
this.name = n;
this.score = s;
this.subClubSharePercent = sSp;
this.simClubSharePercent = sCp;
this.isActive = iA;
this.modificationDatetime = da;
}
//Code using it
Merchant merchant = new Merchant(uID, cID, aID, pID, n, s, sSp, sCp, iA, dt);
对
//Constructor with no parameters
public Merchant( ) { }
//Code using it
Merchant merchant = new Merchant( ) {
userID = uID,
categoryID = aID,
isActive = iA,
modificationDateTime = da
};
主要区别在于第一种方法,您强制执行所有要显示的参数。但是,第二种方法为用户提供了更大的灵活性,可以仅实例化他们想要/需要的参数。您只想更改类中项的值?当然不想再次调用构造函数。您可以将这些转换为属性,例如,
public bool IsActive{get;set;}
然后你可以通过classInstance.IsActive=true
来更改它们。你的问题毫无意义。首先,它不是一个自定义构造函数……它只是一个构造函数。它只是碰巧有参数使它成为一个非默认构造函数。其次,你不使用构造函数来修改类的组件。你使用它们为了创建对象的新实例。因此,您只想向类添加方法,可以调用对象来改变对象的状态。我不想使用SETER GETER。为什么它没有意义?我刚才问哪一个是更好的解决方案!!考虑使用属性。