Как передать объектам типа «использование» функцию? - PullRequest
0 голосов
/ 30 октября 2009

У меня есть код, который выглядит так:

using (DC dc = new DC())
{
    f(dc.obj, a);
}


void f(DC dc, int a)
{
    ...
    dc.obj = a;
}

Не работает - жалуется на ссылку на объект и нестатические поля. Это консольное приложение, поэтому оно имеет функцию Main (). Как я должен заставить это работать? Я попытался добавить ссылки, как он спросил:

У меня есть код, который выглядит так:

using (DC dc = new DC())
{
    f(ref dc.obj, a);
}


void f(ref DC dc, int a)
{
    ...
    dc.obj = a;
}

но все равно не сработало

Ответы [ 2 ]

3 голосов
/ 30 октября 2009

Это не имеет ничего общего с оператором using. Вы пытаетесь вызвать нестатическую функцию-член из Main, которая является статической. Вы не можете сделать это, потому что 'f' является методом экземпляра, то есть вы должны вызывать его из экземпляра класса вашей Программы или из него. Итак, вам нужно сделать вашу функцию статической.

2 голосов
/ 30 октября 2009

f - это метод экземпляра, предположительно в классе Program, верно? Если вы вызываете f из Main, тогда экземпляр Program отсутствует, потому что Main является статическим методом. Измените f на статическое:

static void f(DC dc, int a) { ... }
...