C#: Использовать пространство имен для определенного блока кода?

У меня просто есть точка любопытства. Я работаю с SSRS и называю его методы SOAP. У меня есть тупики, сгенерированные / веб-созданные ссылки, и это все хорошо работает, и я могу выполнить вызовы веб-сервиса хорошо.

Проблема: эти два класса, сгенерированные от WSDLs, ReportService2005 и ReportExecution, имеют некоторые перекрывающиеся определения классов, такие как ParameterValue, DataSourceCredentials, ReportParameter.

В C#, там способ сказать, "Для этого блока кода в методе, используйте это пространство имен?"

Псевдо / главным образом код ошибки сборки:

use-this-namespace (ReportService2005)
{
    ParameterValue[] values = null;
    DataSourceCredentials[] credentials = null;
    ReportParameter[] parameters;
}

Я понимаю, что могу просто записать из полного имени, ReportService2005. ParameterValue [] оценивает = пустой указатель. Или я могу исказить эти два класса наверху перед моим объявлением класса/контроллера. Это - просто что-то, на предмет чего мне любопытно.

11
задан Jason La 29 June 2010 в 19:42
поделиться

8 ответов

Как писали другие, я не думаю, что это возможно. Но что вы можете сделать, так это создать псевдоним для полных пространств имен вместо каждого отдельного класса, который вы хотите использовать, например:

using rs = ReportService2005;
using re = ReportExecution;

// ...

rs.ParameterValue[] values = null;
rs.DataSourceCredentials[] credentials = null;
rs.ReportParameter[] parameters;
re.ParameterValue v2 = ...;
14
ответ дан 3 December 2019 в 03:17
поделиться

Что вы можете сделать, так это отметить свой класс как частичный:

public partial class MyWebServiceClass

в вашем основном исходном файле и создать второй исходный файл с методом, в котором вы хотите использовать другое пространство имен

// MyWebServiceClass.usingMethods.cs

using ReportService2005;
public partial class MyWebServiceClass
{
    // methods...
}
2
ответ дан 3 December 2019 в 03:17
поделиться

Если перекрывающиеся классы идентичны (не просто названы одинаково) и используют одно и то же пространство имен XML и т. Д., То вы можете воспользоваться функцией sharetypes инструмента wsdl.exe для создания обоих прокси веб-службы. так что они используют одни и те же определения типов для этих перекрывающихся классов.

http://msdn.microsoft.com/en-us/library/7h3ystb6%28VS.80%29.aspx

Проверьте параметр «/ sharetypes», чтобы узнать, работает ли он в вашей ситуации.

1
ответ дан 3 December 2019 в 03:17
поделиться

Хотя это не относится к работе с пространствами имен или C #, VB.NET поддерживает ключевое слово With , которое можно использовать как ярлык для доступа к членам объекта:

SomeReallyLongName.Property1 = 1
SomeReallyLongName.Property2 = 2
SomeReallyLongName.Property3 = 3
SomeReallyLongName.Property4 = 4
SomeReallyLongName.Property5 = 5

Можно переписать как:

With SomeReallyLongName
    .Property1 = 1
    .Property2 = 2
    .Property3 = 3
    .Property4 = 4
    .Property5 = 5
End With

Его нет в C #, так как вы можете очень близко подойти к такому же поведению, используя другие подходы:

  • Использование более коротких имен переменных
  • Использование псевдонимов импорта (например, как Мартин предложил)
1
ответ дан 3 December 2019 в 03:17
поделиться

НАСКОЛЬКО невозможно

0
ответ дан 3 December 2019 в 03:17
поделиться

Я не думаю, что ты сможешь это сделать. Для этого вы должны указать полное имя.

2
ответ дан 3 December 2019 в 03:17
поделиться

К сожалению, нет. Нет такого синтаксиса для удовлетворения этой потребности.

1
ответ дан 3 December 2019 в 03:17
поделиться

Еще одна малоизвестная особенность C#, которая может вас заинтересовать, и которая похожа на ответ Мартина, это по сути алиасинг класса в блоках Imports:

using ListOfDictionary = System.Collections.Generic.List<System.Collections.Generic.Dictionary<string, string>>;

и объявление его как

ListOfDictionary list = new ListOfDictionary();

Примечание Эта особенность и пример были найдены в другом вопросе, а именно: Скрытые возможности C#?

7
ответ дан 3 December 2019 в 03:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: