Свойство класса c # с «внутренним» набором доступа становится невидимым - PullRequest
0 голосов
/ 12 июля 2011
public class Request
{
    public string ID { get; internal set; }
    public int TaskID { get; set; }

    public Request()
    {
        ID = System.Guid.NewGuid().ToString();
    }
}

На стороне клиента я вижу только свойство TaskID. Я не понимаю, почему свойство 'ID' не отображается? Если я удаляю «внутренний», это работает. Но мне нужно, чтобы он был внутренним.

Боже мой, я должен был упомянуть, что это WCF.


Спасибо за все ответы. Я понял, что то, что я пытаюсь, невозможно.

Ответы [ 6 ]

4 голосов
/ 12 июля 2011

Почему вы говорите на стороне клиента, вы имеете в виду, что возвращаете класс из веб-службы?В этом случае .NET требует, чтобы и метод получения, и метод установки были общедоступными, чтобы свойство было включено в операции сериализации XML.

1 голос
/ 13 июля 2011

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

1 голос
/ 12 июля 2011

Используя внутренний модификатор, он может быть доступен только: Любым кодом из той же сборки, но не из другой сборки.

А если вы ссылаетесь на производный класс, используйте

Protected internal

Другой путь -

Вам необходимо подружить сборку с атрибутом InternalsVisibleTo.

Предполагая, что вы не подписываете свои сборки, это так же просто, как добавить атрибут InternalsVisibleTo уровня сборки в проект C # с именем сборки VB.Net. Обычно вы делаете это в AssemblyInfo.cs (в папке Properties)

[assembly:InternalsVisibleTo("MyVbAssemblyName")]
1 голос
/ 12 июля 2011

Предполагая, что ваш класс запросов является DataContract, все свойства должны иметь общедоступные методы получения и установки.В противном случае построение класса на «другой» стороне невозможно.Таким образом, это не может быть DataContract.

0 голосов
/ 12 июля 2011

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

0 голосов
/ 12 июля 2011

Если вы удалите модификатор internal, сеттер будет иметь public видимость. Внутренние элементы видны для типов, расположенных в той же сборке, поэтому, если ваш клиент находится в другой сборке, установщик не будет виден.

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