我有一个包含多个班级的项目。为了运行脚本,我需要打开一个excel表以读取它,并在脚本中使用该表中的值。目前,我必须在每个班级中打开和阅读Excel工作表。如何定义变量,这样我只需要打开excel工作表一次并一次读取所有值?我需要能够在许多不同的类中使用这些值。每个类都已经继承了另一个类,所以我不能使用继承。
答案 0 :(得分:1)
您可以将静态类与静态变量一起使用
创建一个包含您的公共全局变量的静态公共类 像这样
public static class Globals
{
public static int mypublic_varible_1=0;
}
然后您可以创建一个将值分配给变量的方法,它将是另一个类。
public class assign_values{
Globals.mypublic_varible_1=100;//data_read_from_excel
}
现在您的 Globals.mypublic_varible_1 的值为100,因为您可以从另一个类中调用它。
答案 1 :(得分:0)
做到这一点的一种方法称为依赖注入,这是我们可以将对象传递给该类所依赖的类的地方。如果我们在类中添加构造函数,以使用代表excel文档的类的实例(即通过阅读文档填充了该实例),则这些类可以共享同一文档。
例如,这是一个简单的类,代表我们从excel文档中读取的内容:
public class ExcelDocument
{
public string SomeValue { get; set; }
public string SomeOtherValue { get; set; }
public override string ToString()
{
return $"SomeValue: {SomeValue}, SomeOtherValue: {SomeOtherValue}";
}
}
这是两个类,它们在其构造函数中使用ExcelDocument
的实例,然后在其中操作值(例如):
public class ClassOne
{
private ExcelDocument excelDoc;
public ClassOne(ExcelDocument document)
{
excelDoc = document;
}
public void DoSomethingWithExcelData()
{
excelDoc.SomeValue = "Modified in ClassOne";
}
}
public class ClassTwo
{
private ExcelDocument excelDoc;
public ClassTwo(ExcelDocument document)
{
excelDoc = document;
}
public void DoSomethingWithExcelData()
{
excelDoc.SomeOtherValue = "Modified in ClassTwo";
}
}
现在,在主程序中,我们可以读取文档并填充类(在这里,我只是将属性设置为“原始值”,而不是读取实际文档),然后可以将类传递给每个上面两个类中的一个,以便他们可以操作它:
public class Program
{
private static void Main()
{
// "Read" an excel document and set properties in this class
var excelDoc = new ExcelDocument
{
SomeValue = "original Value",
SomeOtherValue = "original value"
};
// Instantiate the classes above so they can use the document without re-reading it
var class1 = new ClassOne(excelDoc);
var class2 = new ClassTwo(excelDoc);
// Output the original values of our document
Console.WriteLine(excelDoc);
// Have each class do their operations on the document
class1.DoSomethingWithExcelData();
class2.DoSomethingWithExcelData();
// Output the values again to show how the two independent classes
// manipulated the same document (and without reading it)
Console.WriteLine(excelDoc);
GetKeyFromUser("\nDone! Press any key to exit...");
}
}
以下是输出:
请注意,您也不需要创建将文档作为构造函数参数的类。相反,您可以在文档中包含的类上创建公共方法,以便它们可以使用/操纵值。这样,您只需在类之间或方法之间“传递文档”,而不必重新读取每个类/方法中的excel工作表,例如,您可以:
public class ClassOne
{
public static void DoSomethingWithExcelData(ExcelDocument excelDoc)
{
excelDoc.SomeValue = "Modified in ClassOne";
}
}
然后执行:
private static void Main()
{
var excelDoc = new ExcelDocument
{
SomeValue = "original Value",
SomeOtherValue = "original value"
};
ClassOne.DoSomethingWithExcelData(excelDoc);