Как вызвать метод, в засисимости от значения переменной? Есть объект, в конструкторе которого указывается параметр. У объекта необходимо вызывать метод do(), который в зависимости от параметра должен выполнять другой метод. Как это реализовать без switch именно в c#?
В C# можно использовать делегаты и лямбда-выражения для решения этой задачи. Например, можно создать словарь, в котором ключами будут значения параметра, а значениями будут делегаты, вызывающие соответствующие методы. Затем можно передать параметр объекту и вызвать соответствующий метод, используя делегат из словаря.
Пример реализации:
using System; using System.Collections.Generic; public class MyClass { private int _parameter; private Dictionary<int, Action> _actions = new Dictionary<int, Action>(); public MyClass(int parameter) { _parameter = parameter; _actions.Add(1, () => Method1()); _actions.Add(2, () => Method2()); } public void doSomething() { if (_actions.ContainsKey(_parameter)) { _actions[_parameter](); } else { Console.WriteLine("No method for this parameter."); } } private void Method1() { Console.WriteLine("Method 1 called."); } private void Method2() { Console.WriteLine("Method 2 called."); } } class Program { static void Main() { MyClass obj1 = new MyClass(1); obj1.doSomething(); // Output: Method 1 called MyClass obj2 = new MyClass(2); obj2.doSomething(); // Output: Method 2 called MyClass obj3 = new MyClass(3); obj3.doSomething(); // Output: No method for this parameter } }
В этом примере при создании объекта MyClass указывается параметр, который определяет, какой метод необходимо вызвать при вызове метода doSomething(). При этом используются делегаты и лямбда-выражения для привязки методов к значениям параметра.
В C# можно использовать делегаты и лямбда-выражения для решения этой задачи. Например, можно создать словарь, в котором ключами будут значения параметра, а значениями будут делегаты, вызывающие соответствующие методы. Затем можно передать параметр объекту и вызвать соответствующий метод, используя делегат из словаря.
Пример реализации:
using System;using System.Collections.Generic;
public class MyClass
{
private int _parameter;
private Dictionary<int, Action> _actions = new Dictionary<int, Action>();
public MyClass(int parameter)
{
_parameter = parameter;
_actions.Add(1, () => Method1());
_actions.Add(2, () => Method2());
}
public void doSomething()
{
if (_actions.ContainsKey(_parameter))
{
_actions[_parameter]();
}
else
{
Console.WriteLine("No method for this parameter.");
}
}
private void Method1()
{
Console.WriteLine("Method 1 called.");
}
private void Method2()
{
Console.WriteLine("Method 2 called.");
}
}
class Program
{
static void Main()
{
MyClass obj1 = new MyClass(1);
obj1.doSomething(); // Output: Method 1 called
MyClass obj2 = new MyClass(2);
obj2.doSomething(); // Output: Method 2 called
MyClass obj3 = new MyClass(3);
obj3.doSomething(); // Output: No method for this parameter
}
}
В этом примере при создании объекта MyClass указывается параметр, который определяет, какой метод необходимо вызвать при вызове метода doSomething(). При этом используются делегаты и лямбда-выражения для привязки методов к значениям параметра.