Можно ли получить доступ к переменной экземпляра с помощью статического метода?
В C# можно ли получить доступ к переменной экземпляра с помощью статического метода в разных классах без использования передачи параметров?
В нашем проекте, у меня есть Data access layer
класс, который имеет много статических методов. В этих методах SqlCommand
значение тайм-аута было жестко. В другом классе(Dac
) в нашей структуре есть много методов экземпляра, которые вызывают эти статические методы.
Я не хочу кодировать слишком много, используя передачу параметров. У тебя есть другое решение, которое проще, чем передача параметров?
5 ответов
да, можно получить доступ к переменной экземпляра из статического метода без использования параметра, но только если вы можете получить доступ к нему через то, что объявляется как static. Пример:
public class AnotherClass
{
public int InstanceVariable = 42;
}
public class Program
{
static AnotherClass x = new AnotherClass(); // This is static.
static void Main(string[] args)
{
Console.WriteLine(x.InstanceVariable);
}
}
статический метод не имеет экземпляра для работы, поэтому нет. Это невозможно без передачи параметров.
другим вариантом для вас может быть использование статического экземпляра класса (пример Марка показывает этот метод на работе), хотя, из вашего примера, я не уверен, что это решит вашу проблему.
лично я думаю, что передача параметров будет лучшим вариантом. Я все еще не понимаю, почему ты хочешь уклониться от этого.
конечно, вы можете передать экземпляр в качестве параметра в метод. Например:
public static void DoSomething(Button b)
{
b.Text = "foo";
}
но иначе было бы невозможно получить какие-либо переменные экземпляра.
да, может, если у него есть экземпляр объекта в области видимости. Например, синглеты или объекты, созданные внутри самого метода..
возьмем для примера обычный сценарий :
public static string UserName
{
return System.Web.HttpContext.Current.User.Identity.Name;
}
Нет, ты не можешь.
Если вы хотите получить доступ к переменной экземпляра, то ваш метод по определению не должно быть статичным.