不理解类和用法

时间:2011-10-21 11:21:25

标签: c# winforms oop

不了解课程和用法

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

   using System.Diagnostics;

   namespace DataBaseAccess
   {
          public class Class1
          {
               string[] lines = System.IO.File.ReadAllLines("names.txt");

               public string startgenerationofnames()
               {
                  foreach (string value in lines)
                  {
                     Debug.WriteLine(lines);
                     //call next class with the current value
                  }
               }
         }
   }

我想从winforms中使用这个类,我创建了这个类。

DataBaseAccess.Class1 makenames = new DataBaseAccess.Class1();

如果没有课,我会像平常一样使用它 IE

 DataBaseAccess.Class1.startgenerationofnames();

我不期望返回值,也不期望从类中获取任何内容,除了运行Debug.WriteLine(行)之外; 我显然没有理解这个基本任务,并且已经搜索了好几天了。 谢谢你的帮助

5 个答案:

答案 0 :(得分:1)

您可以将方法和类转换为静态,以便在不需要类的实例的情况下调用方法。

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 :(得分:0)

将您的类创建为静态类和静态方法。然后,您可以在不实例化类的情况下调用该方法。

答案 2 :(得分:0)

您可以定义public string startgenerationofnames()以便在不实例化Class1的情况下使用它,但在这种情况下,这会失败,因为您使用的是(内部startgenerationofnames)非静态变量。 你可以使用:

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
     }
}

答案 3 :(得分:0)

有两件事...... 1你的startgenerationofnames需要返回一个字符串......或者你可以将它改成一个void返回类型。

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
              }
        }
    }

答案 4 :(得分:0)

您不需要使类静态,只需要方法。但是,您目前无法执行此操作,因为您的方法使用类的实例成员:

string[] lines ...

方法的标准静态定义包括static关键字:

public static string startgenerationofnames()

我认为你不想返回(?),你需要将这些行移到方法中(或者让它们在类中保持静态):

public static void StartGenerationOfNames()
{
    string[] lines = System.IO.File.ReadAllLines("names.txt");

    foreach (string line in lines)
    {
        Debug.WriteLine(line);
    }
}

如果您根本不希望实例化该类,则可以使该类本身为静态:

public static class Class1

这会强制类中的所有成员都是静态的,并阻止人们通过以下方式实例化它:

Class1 c = new Class1();

类的用法与静态方法一样:

Class1.StartGenerationOfNames();