Как передать результат метода в качестве параметра конструктору базового класса в C #? - PullRequest
0 голосов
/ 16 июня 2011

Я пытаюсь добиться чего-то вроде этого:

class App {
    static void Main(string[] args) {

        System.Console.WriteLine(new Test("abc")); //output: 'abc'
        System.Console.ReadLine();
    }
}

Я могу сделать это, передав переменную:

   class Test {
        public static string str; 
        public Test (string input) { str = input; }

        public override string ToString() {
                return str; 
        }
    }

работает нормально.Но я хочу сделать что-то вроде:

class Test {
        public static string input;
        public Test (out input) { }

        public override string ToString() {
                return input;
        }
    }

  System.Console.WriteLine(new Test("abc test")); //abc test

Не работает.Как мне это сделать?Спасибо, расширенный.

Ответы [ 2 ]

3 голосов
/ 16 июня 2011

У меня сложилось впечатление, что вы не совсем понимаете, что означает ключевое слово. По сути, когда вы пишете что-то вроде void MyMethod(out string var), это означает, что вы хотите вернуть значение из метода , а не передавать его в метод. Например, есть bool Int32.TryParse(string s, out int result). Он анализирует строку s, возвращает, если анализ был успешным, и помещает проанализированный номер в результат. Таким образом, для правильного использования out у вас должна быть реальная переменная в месте вызова. Таким образом, вы не можете написать Int32.Parse("10", 0), потому что этот метод не может присвоить результат от 10 до 0. Ему нужна реальная переменная, например:

int result;
bool success = Int32.TryParse("10", out result);

Итак, ваше желание несколько другое - оно не соответствует намерениям дизайнера языка для out:)

3 голосов
/ 16 июня 2011

Вы не можете.Переменный подход является абсолютно правильным, хотя переменная не должна объявляться как статическая и не должна быть открытым полем.

class Test {
    public string Input {get;set;}
    public Test (string input) { Input = input; }

    public override string ToString() {
            return Input;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...