Динамический тип в параметре метода - PullRequest
1 голос
/ 14 октября 2010

Я передаю динамический тип в метод и у меня возникают некоторые проблемы при выполнении кода.Хотите знать, если вы можете передать динамический объект в качестве параметра, используя ключевое слово out.

Ниже приведен код.

dynamic btApp = AutomationFactory.CreateObject("Test.Application");
dynamic btMessages;

dynamic btFormat = btApp.Formats.Open("c:\\Temp/Format1.btw", false, "");
btFormat.SetNamedSubStringValue("testing", "testtest");
btFormat.Print("Job1", true, -1, out btMessages);
btFormat.Close(2);

Проблема в способе печати.где последний аргумент передается в динамическом объекте.

Ответы [ 2 ]

1 голос
/ 14 октября 2010

Когда вы передаете параметр out методу с переменной, имеющей тип dynamic, сам параметр должен иметь тип dynamic. Допустим следующий код:

class Program {
    static void Main(string[] args) {
        dynamic value;
        SomeMethod(out value);
        return;
    }
    static void SomeMethod(out dynamic value) {
        value = "5";
        return;
    }
}

На самом деле SomeMethod может присвоить что-либо значение. Если параметр не имеет динамического типа, то компилятор пытается выполнить преобразование перед вызовом метода, что недопустимо, поэтому, если параметр в SomeMethod не динамический, вам не повезло.

0 голосов
/ 14 октября 2010

Это зависит от того, что является действительной сигнатурой типа Print метода.Тип dynamic представляется как object во время выполнения, поэтому, если метод Print принимает параметр out типа object (или dynamic), он должен работать.

Если метод Print имеет фактический параметр out другого типа, то фактический тип времени выполнения, используемый на стороне вызывающей стороны, не соответствует фактическому типу объявления, поэтому он не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...