Предположим, у меня есть файл 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
Из другого метода итерации списка и сохранение их в новых переменных в зависимости от их типа.
Надеюсь, это поможет.
Другие ответы, которые я видел до сих пор, дают то, что я считаю крайне плохим советом.
Без более более целенаправленного примера трудно сказать, какой будет лучший подход. В общем, вы хотите избежать ваших методов, имеющих побочные эффекты – это затрудняет отладку и тестирование вашего приложения. В принципе, если вы вызываете метод 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.