2014-10-12 2 views
0

Я пишу программу проверки обновлений для своей программы, и я использую xml с удаленного сервера. Запрос работает нормально, и он делает то, что я хочу. Проблема в том, что я не могу вызвать функцию из другого файла. (См код ниже)Доступ к членам класса, определенным в другом файле * .cs

Файлы

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

(я не добавляя никаких новых <release> тегов на XML, так что всегда есть 1)

Вопрос

Итак, мой вопрос: Как это получить доступ к элементам массива из RequestVersion() в home.cs?

+1

ли эти два файла в одном проекте? – NMK

+1

Обратите внимание, что вы должны [никогда не извлекать исключения, о которых вы не планируете ничего делать] (http://stackoverflow.com/questions/4673860/what-does-only-catch-exceptions-you-can-handle- действительно-среднее) –

+0

Рассмотрите возможность изменения названия, пожалуйста, прочитайте эту ссылку, чтобы узнать больше http://meta.stackexchange.com/questions/10647/how-do-i-write-a-good-title – NMK

ответ

4

Я не очень понимаю вашу проблему, но:

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

Также убедитесь, что вы импортируете требуемый номер имен (MyName) – NMK

0

Реферирование код в другие файлы и проекты

В рамках того же проекта он не имеет абсолютно никакого значения, является ли код находится в то же или в разных файлах. Единственное, что имеет значение, - это модификаторы доступа (public, protected, internal и private).

Если два фрагмента кода находятся в разных проектах, то скомпилированный код будет скомпилирован в две разные сборки (*.exe или *.dll). Поэтому один проект должен будет ссылаться на другой. Обычно проект запуска (*.exe) будет ссылаться на проект библиотеки классов (*.dll).

Если два проекта находятся в одном решении, вы можете добавить так называемую ссылку на проект. Щелкните правой кнопкой мыши проект библиотеки классов в проводнике решений и нажмите «Копировать как ссылку на проект». В стартовом проекте щелкните правой кнопкой мыши по адресу «Ссылки» и нажмите «Вставить ссылку».

Если два проекта находятся в разных решениях, вам нужно будет добавить ссылку на библиотеку DLL класса (обычно одну в bin/Release) из проекта запуска. Щелкните правой кнопкой мыши «Ссылки» и нажмите «Добавить ссылку ...». В диалоговом окне ссылок выберите «Обзор» и выберите DLL.

Также не забудьте создавать круговые зависимости (проект Проект ссылок B и проект B ссылается на проект A). Если у вас есть такая зависимость, вы обычно можете разрешить ее, поставив код, к которому должны быть обращены эти два проекта, в третий проект C. Затем измените ссылки на: Ссылки на ссылки C и B. C.


Вызов метода другого класса

Типы (класс в вашем случае) и их члены (свойства, методы, события ...) должны быть объявлены в качестве public для того, чтобы быть доступным из других проектов. В рамках одного проекта они также могут быть объявлены как internal. (Они также могут быть объявлен как protected если вы хотите получить новые классы.)

Если член объявлен как static или если он является постоянным, вы можете получить доступ к нему, указав имя типа точки имени элемента:

var result = MyClass.MyMethod(); 

Если член является членом экземпляра вы должны вызвать его из экземпляра типа (объект):

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