假设我有一个包含多种不同表单的项目:Form1
,Form2
,Form3
我还有一个名为CustomTools
的类,其中包含经常使用的验证程序和功能:
class CustomTools
{
bool isNumeric(object input)
{
double result;
if (input == null)
return false;
else
{
if (double.TryParse(input.ToString(), out result))
return true;
else
return false;
}
}
}
现在,当我尝试在我的某个表单中使用isNumeric
时,它不会出现在IntelliSense弹出窗口中。在我的所有表格中提供此功能的最佳方法是什么?非常感谢你的帮助!
答案 0 :(得分:4)
您必须在方法之前添加public
。
例如:
public bool isNumberic(object input)
{
...
}
您可能希望将方法设为静态:
public static bool isNumberic(object input)
{
...
}
这样你就可以通过以下方式打电话给他们:
CustomTools.isNumberic(someVariable);
答案 1 :(得分:0)
您可以使用静态/共享方法创建服务/帮助器类型类。这可以方便地将您的方法分组到一个地方,而不需要实例。但是,这种方法仅适用于无状态方法。您还可以考虑表单继承的基类。这个类可以容纳你的共享方法。有很多,可以接受的方法可以给这只猫上皮。
答案 2 :(得分:0)
类是引用类型,因此您需要的是所有三种形式的CustomTools
类型的变量。我建议使用属性来设置像这样的变量
public class Form1 : Form
{
public CustomTools Tools { get; set; }
}
public class Form2 : Form
{
public CustomTools Tools { get; set; }
}
public class Form2 : Form
{
public CustomTools Tools { get; set; }
}
每当您创建表单时,请为其指定Tools
属性
var tools = new CustomTools();
var f1 = new Form1() { Tools = tools };
var f2 = new Form2() { Tools = tools };
var f3 = new Form3() { Tools = tools };
...
f1.Show();
f2.Show();
f3.Show();
在每个表单中使用工具
public void inputTextBox_Clicked(object sender, EventArgs e)
{
var input = (sender as TextBox).Text;
if( Tools.IsNumeric(input) )
{
...
}
}
更好的解决方案是使用扩展方法。
答案 3 :(得分:0)
以下是如何实现一个Extension方法,该方法可用于命名空间及其下的所有类:
public class Form1
{
public void inputTextBox_Changed(object sender, EventArgs e)
{
object input=(sender as Control).Text;
if (sender.IsNumeric())
{
}
}
}
public static class CustomTools
{
public static bool IsNumeric(this object item)
{
if (item==null) return false;
double result;
return double.TryParse(item.ToString(), out result);
}
}