C# 不理解类和用法
不理解类和用法 我有一个VS2010项目,这个项目有很多类(项目中的子项目) 我正在尝试在类中使用方法,就像在本地winforms项目中一样 即 我想使用winforms中的这个类,我已经创建了这个类C# 不理解类和用法,c#,winforms,oop,C#,Winforms,Oop,不理解类和用法 我有一个VS2010项目,这个项目有很多类(项目中的子项目) 我正在尝试在类中使用方法,就像在本地winforms项目中一样 即 我想使用winforms中的这个类,我已经创建了这个类 DataBaseAccess.Class1 makenames = new DataBaseAccess.Class1(); using System.Diagnostics; namespace DataBaseAccess { public static class Class1
DataBaseAccess.Class1 makenames = new DataBaseAccess.Class1();
using System.Diagnostics;
namespace DataBaseAccess
{
public static class Class1
{
private static string[] lines = System.IO.File.ReadAllLines("names.txt");
public static void startgenerationofnames()
{
foreach (string value in lines)
{
Debug.WriteLine(lines);
//call next class with the current value
}
}
}
}
我想用一种正常的方式来使用它,就像没有课的时候一样
即
除了运行Debug.WriteLine(行),我不希望返回值,也不希望类中有任何内容;
我显然无法理解这项基本任务,并且已经寻找了好几天了。
感谢您的帮助将您的类创建为静态类和静态方法。然后您可以在不实例化类的情况下调用该方法。您可以定义
公共字符串startgenerationofnames()
以在不实例化Class1的情况下使用它,但在这种情况下,这会失败,因为您正在使用(在startgenerationofnames
内部)非静态变量。DataBaseAccess.Class1 makenames = new DataBaseAccess.Class1();
using System.Diagnostics;
namespace DataBaseAccess
{
public static class Class1
{
private static string[] lines = System.IO.File.ReadAllLines("names.txt");
public static void startgenerationofnames()
{
foreach (string value in lines)
{
Debug.WriteLine(lines);
//call next class with the current value
}
}
}
}
您可以使用:
public class Class1
{
static string[] lines = System.IO.File.ReadAllLines("names.txt");
public static string startgenerationofnames()
{
foreach (string value in lines)
{
Debug.WriteLine(line); // not lines
//call next class with the current value
}
return ""; // or what you need
}
}
您可以将方法和类转换为静态的,以便在不需要类实例的情况下调用该方法
DataBaseAccess.Class1 makenames = new DataBaseAccess.Class1();
using System.Diagnostics;
namespace DataBaseAccess
{
public static class Class1
{
private static string[] lines = System.IO.File.ReadAllLines("names.txt");
public static void startgenerationofnames()
{
foreach (string value in lines)
{
Debug.WriteLine(lines);
//call next class with the current value
}
}
}
}
现在您可以这样调用它:
DataBaseAccess.Class1.startgenerationofnames();
有两件事。。。1您的startgenerationofnames需要返回字符串。。。或者您可以将其更改为无效返回类型 2将读取所有行的加载移到函数本身中。。。作为对象构造的一部分,您不想做这样的事情。。。因为它会给你一个错误,而这个错误并不明显 试试这个
public static class Class1
{
public static void startgenerationofnames()
{
string[] lines = System.IO.File.ReadAllLines("names.txt");
foreach (string value in lines)
{
Debug.WriteLine(lines);
//call next class with the current value
}
}
}
您不需要将类设置为静态,只需要将方法设置为静态。但是,当前无法执行此操作,因为您的方法使用类的实例成员:
public static void StartGenerationOfNames()
{
string[] lines = System.IO.File.ReadAllLines("names.txt");
foreach (string line in lines)
{
Debug.WriteLine(line);
}
}
string[]行…
方法的标准静态定义包括static
关键字:
公共静态字符串startgenerationofnames()
我认为您不希望返回(?),需要将行移动到方法中(或使它们在类中保持静态):
如果您根本不想实例化该类,可以将该类本身设置为静态:
公共静态类Class1
然后,这会强制类中的任何成员都是静态的,并阻止人们通过以下方式实例化它:
class1c=newclass1()代码>
该类的用法与静态方法的用法相同:
Class1.StartGenerationOfNames()代码>将类设为静态对于包含静态方法来说不是必需的。我将类设为静态,但是现在从winform中我该如何调用它?当我尝试创建class@AdamHouldsworth-是的,但OP说这是使用该类的唯一方式,因此最好将其设置为静态类来记录其意图。@j0rd4n同意,答案没有说明这一点,而且听起来好像静态方法需要静态类,因此我的评论是这样的;如果它不在同一名称空间中,它将是DataBaseAccess.Class1.startgenerationofnames();我还可以看到您的返回类型是string,并且您当前没有返回任何字符串值?此外,我们假设您的类位于同一个项目中,如果不是,您将不得不向它添加一个项目引用。不会编译,并且该类不必为了拥有静态方法而保持静态。请注意:您不能在静态方法中使用行
,因为行
不是静态的。我说得对吗?@AdamHouldsworth-我知道,但传统知识是,当一个类只有静态方法时,最好将该类设置为静态以记录其意图。@Marco-是的,我更新了代码以反映这一点。使线条保持静止。@Adamhuldsworth:是的,我刚刚编辑了我的答案。无论如何,我的示例想向OP展示他如何在没有类实例的情况下调用这个方法。谢谢!