C# 优化多参数传递给类构造函数的过程
我正在使用C.Net和SQL server编写一个桌面应用程序。我有几个calss构造函数,每个构造函数都有几个参数,每次我都应该将它们传递给它们。以下是一个例子:C# 优化多参数传递给类构造函数的过程,c#,.net,algorithm,C#,.net,Algorithm,我正在使用C.Net和SQL server编写一个桌面应用程序。我有几个calss构造函数,每个构造函数都有几个参数,每次我都应该将它们传递给它们。以下是一个例子: Classes.Prices prices = new Classes.Prices (comboBox1.SelectedValue.ToString(), Convert.ToInt32(txtPrice.Text), Convert.ToInt32(txtCarbohydrate.Text), Co
Classes.Prices prices = new Classes.Prices
(comboBox1.SelectedValue.ToString(),
Convert.ToInt32(txtPrice.Text),
Convert.ToInt32(txtCarbohydrate.Text),
Convert.ToInt32(txtProtein.Text),
Convert.ToInt32(txtFat.Text),
Convert.ToInt32(txtHumidity.Text),
Convert.ToInt32(txtminerals.Text));
有没有办法克服这一点,并防止为转换和传递多个参数而编写大量代码
对于构造函数?在一个方法中不应使用超过2到3个参数 定义一个名为PriceHolder的类 然后,构造函数必须接受PriceHolder的对象 像这样:
public Prices(PriceHolder hold)
{
// access the values by hold.Fat, hold.Minerals etc
}
此方法使重构代码变得更容易,或者如果您打算添加更多属性
此外,您的程序员同事将能够轻松理解它。可读性很重要 一个方法中使用的参数不应超过2到3个 定义一个名为PriceHolder的类 然后,构造函数必须接受PriceHolder的对象 像这样:
public Prices(PriceHolder hold)
{
// access the values by hold.Fat, hold.Minerals etc
}
此方法使重构代码变得更容易,或者如果您打算添加更多属性
此外,您的程序员同事将能够轻松理解它。可读性很重要 是的。使用数据绑定将表单绑定到对象。数据绑定会自动在两个方向上进行转换,即从字符串转换为数字和日期,然后再转换 除了具有自动转换的优点外,还可以将业务逻辑与表单分离。例如,您可以将任何逻辑应用于名为Prices.Price或Price的属性(如果该逻辑在Prices类中),而不是将其应用于Convert.ToInt32txtPrice.Text之类的构造,这使代码更易于理解和维护 为了使用数据绑定,请为类添加一个公共默认构造函数、一个不带参数的构造函数,并为每个值添加一个公共属性
public class Prices
{
public Prices ()
{ }
public Prices (decimal price, int carbohydrate, ...)
{ ... }
public decimal Price { get; set; }
public int Carbohydrate { get; set; }
...
}
见:
关于developerfusion
论代码工程
处理问题的一种完全不同的方法是规范化数据。引入一个参数类,并将参数存储在Prices类的字典或列表中。这使您能够在循环中处理参数,而不必单独编程每个参数。它还有一个优点,就是可以用最少的编码进行扩展
public class Parameter
{
public string Name { get; set; }
public int Value { get; set; }
}
public class Prices
{
public Prices (IEnumerable<Parameter> parameters)
{
...
}
}
有。使用数据绑定将表单绑定到对象。数据绑定会自动在两个方向上进行转换,即从字符串转换为数字和日期,然后再转换 除了具有自动转换的优点外,还可以将业务逻辑与表单分离。例如,您可以将任何逻辑应用于名为Prices.Price或Price的属性(如果该逻辑在Prices类中),而不是将其应用于Convert.ToInt32txtPrice.Text之类的构造,这使代码更易于理解和维护 为了使用数据绑定,请为类添加一个公共默认构造函数、一个不带参数的构造函数,并为每个值添加一个公共属性
public class Prices
{
public Prices ()
{ }
public Prices (decimal price, int carbohydrate, ...)
{ ... }
public decimal Price { get; set; }
public int Carbohydrate { get; set; }
...
}
见:
关于developerfusion
论代码工程
处理问题的一种完全不同的方法是规范化数据。引入一个参数类,并将参数存储在Prices类的字典或列表中。这使您能够在循环中处理参数,而不必单独编程每个参数。它还有一个优点,就是可以用最少的编码进行扩展
public class Parameter
{
public string Name { get; set; }
public int Value { get; set; }
}
public class Prices
{
public Prices (IEnumerable<Parameter> parameters)
{
...
}
}
也许这会有帮助。价格结构如下所示:
public Prices(string s, int[] values)
{
...
}
让我们以以下形式声明此静态方法:
private static int[] ParseInts(params TextBox[] textBoxes)
{
return Array.ConvertAll(textBoxes, tb => int.Parse(tb.Text));
}
然后构造函数调用变成:
Prices prices = new Prices(comboBox1.SelectedValue.ToString(),
ParseInts(txtPrice, txtCarbohydrate, txtProtein, txtFat, txtHumidity, txtminerals));
编辑。您还可以将一组texbox存储为数组,而不是每次动态创建:
private readonly TextBox[] textBoxes = new[] { txtPrice, txtCarbohydrate, txtProtein, txtFat, txtHumidity, txtminerals };
Prices prices = new Prices(comboBox1.SelectedValue.ToString(), ParseInts(textBoxes));
也许这会有帮助。价格结构如下所示:
public Prices(string s, int[] values)
{
...
}
让我们以以下形式声明此静态方法:
private static int[] ParseInts(params TextBox[] textBoxes)
{
return Array.ConvertAll(textBoxes, tb => int.Parse(tb.Text));
}
然后构造函数调用变成:
Prices prices = new Prices(comboBox1.SelectedValue.ToString(),
ParseInts(txtPrice, txtCarbohydrate, txtProtein, txtFat, txtHumidity, txtminerals));
编辑。您还可以将一组texbox存储为数组,而不是每次动态创建:
private readonly TextBox[] textBoxes = new[] { txtPrice, txtCarbohydrate, txtProtein, txtFat, txtHumidity, txtminerals };
Prices prices = new Prices(comboBox1.SelectedValue.ToString(), ParseInts(textBoxes));
开玩笑的,你是说单独上课?因为我已经定义了这样一个CALS?那么,我如何才能将文本框的值获取到该clas,再次进行大量编码?您可以使用hold访问这些值。fat如果我在一个方法中使用3个以上的参数,会出现什么问题?没有问题,但它是无组织的,如果您想添加更多的参数,它可能会很混乱。正如我所说,可读性很重要。开玩笑的,你是说一个单独的类?因为我已经定义了这样一个CALS?那么,我如何才能将文本框的值获取到该clas,再次进行大量编码?您可以使用hold访问这些值。fat如果我在一个方法中使用3个以上的参数,会出现什么问题?没有问题,但它是无组织的,如果您想添加更多的参数,它可能会很混乱。正如我所说的,可读性很重要。一个选项是定义一个采用字符串而不是整数的构造函数重载。一个选项是定义一个采用字符串的构造函数重载
这正是我很久以来一直在寻找的,我希望能够编写标准、高性能和专业的应用程序。关于业务逻辑的分离,我如何编写标准和优化的代码,你能给我推荐一些源代码吗?有一种称为模型-视图-控制器MVC的设计模式。Google这个术语和术语数据绑定、对象数据绑定、winforms等等。这正是我很久以来一直在寻找的,我希望能够编写标准、高性能和专业应用程序,就业务逻辑的分离提出建议,如何编写标准和优化的代码,你能给我一些参考资料吗?有一种称为模型-视图-控制器MVC的设计模式。Google这个术语和术语数据绑定、对象数据绑定、winforms等等。很好的方法,你为什么使用静态方法?举个例子。它可以很容易地被一个无参数的非静态方法所取代,即使用TextBox数组。很好的方法,你为什么使用静态方法?举个例子。它可以很容易地替换为无参数的非静态方法,即使用TextBox数组。