C# 不理解类和用法

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

不理解类和用法

我有一个VS2010项目,这个项目有很多类(项目中的子项目) 我正在尝试在类中使用方法,就像在本地winforms项目中一样 即

我想使用winforms中的这个类,我已经创建了这个类

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展示他如何在没有类实例的情况下调用这个方法。谢谢!