Как передать аргументы общедоступному классу в C #? - PullRequest
2 голосов
/ 01 февраля 2012

Как передать аргументы общедоступному классу в C #.Я новичок в C #, поэтому, пожалуйста, прости вопрос n00b.

Учитывая этот пример класса:

public class DoSomething
{
    public static void  Main(System.String[] args)
    {

        System.String apple = args[0];
        System.String orange = args[1];
        System.String banana = args[2];
        System.String peach = args[3];

        // do something
    }
}

Как передать запрошенные аргументы?

Я ожидаюнаписать что-то вроде:

DoSomething ds = new DoSomething();
ds.apple = "pie";

Но это не удается.

Ответы [ 5 ]

6 голосов
/ 01 февраля 2012

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

// Here you declare your DoSomething class
public class DoSomething
{
    // now you're defining a static function called Main
    // This function isn't associated with any specific instance
    // of your class. You can invoke it just from the type,
    // like: DoSomething.Main(...)
    public static void Main(System.String[] args)
    {
        // Here, you declare some variables that are only in scope
        // during the Main function, and assign them values 
        System.String apple = args[0];
        System.String orange = args[1];
        System.String banana = args[2];
        System.String peach = args[3];
    }
        // at this point, the fruit variables are all out of scope - they
        // aren't members of your class, just variables in this function.

    // There are no variables out here in your class definition
    // There isn't a constructor for your class, so only the
    // default public one is available: DoSomething()
}

Вот что вы, вероятно, хотели для определения класса:

public class DoSomething
{
    // The properties of the class.
    public string Apple; 
    public string Orange;

    // A constructor with no parameters
    public DoSomething()
    {
    }

    // A constructor that takes parameter to set the properties
    public DoSomething(string apple, string orange)
    {
        Apple = apple;
        Orange = orange;
    }

}

И тогда вы можете создать / управлять классом, как показано ниже.В каждом случае экземпляр получит Apple = "foo" и Orange = "bar"

DoSomething X = new DoSomething("foo", "bar");

DoSomething Y = new DoSomething();
Y.Apple = "foo";
Y.Orange = "bar";

DoSomething Z = new DoSomething()
{
    Apple = "foo",
    Orange = "bar"
};
5 голосов
/ 01 февраля 2012

Параметр String[] args метода Main заполняется при запуске приложения через командную строку:

/your/application/path/DoSomething.exe arg1 arg2 arg3 ...

Если вы хотите передать эти аргументы программно, у вас естьчтобы установить ваши переменные как общедоступные свойства, например:

public class DoSomething
{
   public string Apple { get; set; }
   public string Orange { get; set; }
   public string Banana { get; set; }
   // other fruits...
}

Тогда вы можете сделать:

public class Test
{
    public static void  Main(System.String[] args)
    {
        DoSomething ds = new DoSomething();
        ds.Apple = "pie";

        // do something
    }
}
1 голос
/ 01 февраля 2012

Конструктор:

public class DoSomething
{
    public DoSomething(String mystring) { ... }

    static void Main(String[] args) {
        new DoSomething(args[0]);
    }
}

Редактировать

Заметил, что онлайн-книга по C # написана на немецком языке. Но я уверен, что есть и английские книги.

1 голос
/ 01 февраля 2012

Используйте публичное свойство, вы можете использовать автоматически реализуемое свойство , чтобы начать с:

public class DoSomething
{
   public string Apple {get;set;}
}
0 голосов
/ 01 февраля 2012

В приведенном вами примере переменные, которые вы создаете, находятся в рамках метода Main; они не являются переменными уровня класса.

Вы можете получить к ним доступ, сделав их членами класса, следующим образом:

Мой оригинальный фрагмент кода был неправильным; Ваш Main метод был статическим, поэтому вы не можете получить доступ к переменным экземпляра.

public class DoSomething 
{ 
    public string apple;

    public void Main(System.String[] args) 
    { 
         apple = args[0];
    } 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...