Intereting Posts
WPF ListView SelectedItem имеет значение null Создать COM / ActiveXObject в C #, использовать с JScript, с простым событием Преобразовать список <Список > в список в C # Вызовите и используйте Web API в winform с помощью C # .net Дизайнер Visual Studio 2015 (Community) показывает NullReferenceException для простого универсального приложения Как получить доступ к classу в C ++ / CLI из C #? «Проект с типом выхода Class Library не может быть запущен напрямую» Если (false = true) выполняется блок, когда исключение бросания находится внутри Блокировка aqcuired и дальнейшие попытки блокировки не блокируются: перезаписываются ли блокировки C #? передача объекта подключения DB к методам Как вы можете тестировать базовый controller ASP.NET или объект модели? Как выполнять итерацию с помощью DataTable Как сделать точный десятичный таймер? IEqualityComparer GetHashCode вызывается, но Equals not Исключение в SslStream.AuthenticateAsClient (сообщение было плохо отформатировано)

Доступ к переменной из другого метода в другом classе

Предположим, у меня есть файл ABC.CS в этом файле, у меня есть class ABC как ABC.CS ниже, и метод Test() :

 public class ABC { public static void Test() { int a=10; int b=11; int c=12; //many many variables } } 

Я хочу получить доступ к a , b … и т. Д. В другом методе другого classа другого файла.

  • Файл: XYZ.cs
  • Класс: XYZ
  • Метод: MyMethos() .

Примечание . Переменная может быть любого типа, например, int , float и DataTable т. Д.

Обновлено Кажется, что люди игнорируют static ключевое слово, пожалуйста, дайте рабочий пример

Как я могу это сделать ?

Благодарю.

Объявить переменные как public и static стороны метода

Вы можете получить к ним доступ, просто используя ClassName.VariableName

надеюсь это поможет..

Вы не можете. Вы должны определить свои переменные за пределами вашего метода и сделать их public Если ваш другой class наследуется от ABC вы можете сделать их protected .

Вы не можете получить доступ к локальным варам путем отражения, но вы можете получить доступ к статическим vars

Теоретически вы не можете этого сделать, но если вы немного измените метод, вы можете получить то, что хотите.

Объявлять список объектов публично и получать доступ к нему из другого classа.

 public List differentVarColl = new List(); void MethodA() { int a = 0; int b = 10; double c = -90; DataTable dtData = new DataTable(); //Do rest of things differentVarColl.Add(a); differentVarColl.Add(b); differentVarColl.Add(c); differentVarColl.Add(dtData); } 

Из другого метода итерации списка и сохранение их в новых переменных в зависимости от их типа.

Надеюсь, это поможет.

Другие ответы, которые я видел до сих пор, дают то, что я считаю крайне плохим советом.

Без более более целенаправленного примера трудно сказать, какой будет лучший подход. В общем, вы хотите избежать ваших методов, имеющих побочные эффекты – это затрудняет отладку и тестирование вашего приложения. В принципе, если вы вызываете метод 100 раз с теми же входами, он должен возвращать те же результаты 100 раз.

В общем, хороший подход заключается в том, чтобы ваши методы возвращали то, что представляет результаты выполняемой операции.

Итак, у вас есть class или структура, которые представляют ваши возвращаемые значения:

 public struct SomeMethodResult { public int WhateverProperty {get;set;} public int WhateverOtherProperty {get;set;} } 

Затем верните экземпляр этого classа по мере необходимости:

 public SomeMethodResult SomeMethod() { var result = new SomeMethodResult(); result.WhateverProperty = 1; result.WhateverOtherProperty = 2; //etc return result; } 

Если вы вызываете метод XYZ.myMethod из Test, myMethod должен быть статическим методом. В этом случае для переменных типа значения вызовите метод, используя ref для типов значений.

Если вам нужно получить доступ к переменной, так как вам нужно получить доступ к Datatable, напрямую используя имя classа или ссылку на объект, вам нужно объявить переменную как переменную classа и сделать ее статической.

Как только вы это сделаете, попробуйте инициализировать datatable в статическом конструкторе:

 static ABC() { ABC.SomeDataTableVariable = new DataTable(); } 

Попробуйте это.

Использование статических переменных / функций – это одно; другой доступ к переменной из-за пределов ее области .

Из MSDN:

Если локальная переменная объявлена ​​с ключевым словом Static, ее время жизни больше, чем время выполнения процедуры, в которой она объявлена. Если процедура находится внутри модуля, статическая переменная сохраняется, пока ваше приложение продолжает работать.

А также статическая переменная будет существовать для каждого classа , а не для экземпляра.

Итак, я предполагаю, что вам понадобятся экземпляры classа ABC:

 public class ABC { private int a; //also you can add 'readonly' if you will not change this value in its lifetime private int b; private int c; public int A() { get { return a; } } public int B() { get { return b; } } public int C() { get { return c; } } public void Test() { a=10; b=11; c=12; //many many variables } } 

Из другого classа вы можете позвонить:

 ABC abcInstance = new ABC(); abcInstance.Test(); //you set the values int aTemp = abcInstance.A(); // now you have the 'a' value of ABC's property.