【问题标题】:Accessing class members defined in another *.cs file访问在另一个 *.cs 文件中定义的类成员
【发布时间】:2014-10-12 15:01:14
【问题描述】:

我正在为我的程序编写一个更新检查器,并且我正在使用来自远程服务器的 xml。该请求运行良好,并且可以满足我的要求。问题是我无法从另一个文件调用该函数。 (见下面的代码)

文件

  • home.cs - 我想打电话给RequestVersion()的地方
  • version.cs - RequestVersion() 所在的位置

代码

version.cs

namespace MyName
{
class version
{
    public string[] RequestVersion()
    {
        XmlDocument doc = new XmlDocument();
        try
        {
            string[] version_data = new string[3];
            doc.Load("link_here");
            foreach (XmlNode node in doc.DocumentElement)
            {
                string version = node.Attributes[0].Value;
                string date = node["date"].InnerText;
                string changelog = node["changelog"].InnerText;

                version_data[0] = version;
                version_data[1] = date;
                version_data[2] = changelog;

                return version_data;

            }
        }
        catch (Exception xml_ex)
        {

        }
        return null;
    }
  }
}

(返回一个数组)

home.cs

 private void checkForUpdatesToolStripMenuItem_Click(object sender, EventArgs e)
 {
    //This is the place from where i want to access the array!       
 }

还有我的 XML 结构:

<?xml version="1.0" encoding="UTF-8"?>
<SerialMate>
  <release version="1.0.0">
    <date>12-10-2014</date>
    <changelog>Test</changelog>
  </release>
</SerialMate>

(我没有在 xml 上添加任何新的&lt;release&gt; 标签,所以它总是有 1)

问题

所以,我的问题是:它如何从home.cs 中的RequestVersion() 访问数组元素?

【问题讨论】:

  • 这两个文件是否在同一个项目中?
  • 考虑更改标题,请阅读此链接以了解更多信息meta.stackexchange.com/questions/10647/…
  • 很遗憾,您没有为我们提供足够的信息来回答这个问题。我们需要知道您要在checkForUpdatesToolStripMenuItem_Click 中添加什么以及文件在您的解决方案中的排列方式(它们是否都在同一个项目中?它们是否在同一个命名空间中?项目当前是否正在编译?)xml 和RequestVersion 实现细节与这个问题无关。可能 Visual Studio 也不相关。
  • 如果您写出函数调用(就像下面的机器人建议的那样),了解您遇到的构建错误也很有用。

标签: c# xml visual-studio


【解决方案1】:

我不太明白你的问题,但是:

version v = new version();
string[] s = v.RequestVersion();

【讨论】:

  • 还要确保导入所需的命名空间 (MyName)
【解决方案2】:

在其他文件和项目中引用代码

在同一个项目中,代码是在同一个文件中还是在不同的文件中完全没有区别。唯一重要的是访问修饰符(publicprotectedinternalprivate)。

如果两个代码段在不同的项目中,那么编译后的代码将被编译成两个不同的程序集(*.exe*.dll)。因此,一个项目将不得不参考另一个项目。通常,启动项目 (*.exe) 将引用类库项目 (*.dll)。

如果两个项目在同一个解决方案中,您可以添加一个所谓的项目引用。右键单击解决方案资源管理器中的类库项目,然后单击“复制为项目引用”。在启动项目中,右键单击“References”,然后单击“粘贴引用”

如果这两个项目在不同的解决方案中,您必须在启动项目中添加对类库 DLL(通常是 bin/Release 中的那个)的引用。右键单击“引用”,然后单击“添加引用...”。在引用对话框中选择“浏览”并选择 DLL。

还要确保不要创建循环依赖项(项目 A 引用项目 B,项目 B 引用项目 A)。如果你有这样的依赖,你通常可以通过将两个项目必须访问的代码放到第三个项目C中来解决它。然后将引用更改为:A引用C和B引用C。


调用另一个类的方法

类型(在您的情况下是一个类)及其成员(属性、方法、事件……)必须声明为 public 才能从其他项目中访问。在同一个项目中,它们也可以声明为internal。 (如果你想派生新的类,它们也可以声明为protected。)

如果一个成员被声明为static或者如果它是一个常量,你可以通过指定类型名称来访问它:在成员名称上加上点:

var result = MyClass.MyMethod();

如果成员是实例成员,则必须从类型(对象)的实例中调用它:

MyClass obj = new MyClass();
var result = Obj.MyMethod();

【讨论】:

    猜你喜欢
    • 2013-05-11
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多