C # относится к родителю - PullRequest
       21

C # относится к родителю

0 голосов
/ 16 марта 2012

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

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

Мне трудно понять концепции объектов в C #, поскольку мой опыт программирования в основном основан на JavaScript.

Любая помощь наиболее ценится.

namespace Tests.Classes
{
    public class L
    {
        dynamic uri;
        dynamic service;
        dynamic credentials;
        dynamic proxy;

        public L L()
        {
            this.uri = new Uri("bladie bladie blah");
            this.credentials = new ClientCredentials();
            this.credentials.Windows.ClientCredential = (NetworkCredential)CredentialCache.DefaultCredentials;
            this.proxy = new OrganizationServiceProxy(this.uri, null, this.credentials, null);
            this.service = (IOrganizationService)this.proxy;
            return this;
        }

        public class OL
        {
            public OL OL(dynamic a)
            {
                this.service = parent.service; // <- doesn't compile
                return this;
            }
        }
    }
}

Чтобы было понятно, как это называется:

var l = new L();
l.OL("haha");

Может быть, мой код недостаточно понятен. Это будет держать фанатиков классификации в страхе: P.

namespace Tests.Classes
{
    public class L
    {
        Uri uri;
        IOrganizationService service;
        ClientCredentials credentials;
        OrganizationServiceProxy proxy;

        public L L()
        {
            this.uri = new Uri("hBladie Bladie Blah");
            this.credentials = new ClientCredentials();
            this.credentials.Windows.ClientCredential = (NetworkCredential)CredentialCache.DefaultCredentials;
            this.proxy = new OrganizationServiceProxy(this.uri, null, this.credentials, null);
            this.service = (IOrganizationService)this.proxy;

            return this;
        }

        public class OL
        {
            Entity entity = new Entity();
            IOrganizationService service = null;

            public OL OL(dynamic a)
            {
                if (a is Entity)
                {
                    this.entity = a;
                }
                if (a is string)
                {
                    this.entity = new Entity(a);
                }

                return this;
            }

            public OL attr(dynamic key, dynamic value)
            {
                this.entity[key] = value;
                return this;
            }

            public Boolean save()
            {
                this.parent.service.create(this.entity); // parent does not exist
            }
        }
    }
}

Я ненавижу грязное программирование, мне нравится стиль jQuery.

Вот как должен использоваться код:

new L().OL("haha").attr("Hello", "world").save();

или

var l = new L();
l.OL("HAHA").attr("foo", "bar").save();
l.OL("pff").attr("boppa", "deebop").save();

Ответы [ 3 ]

1 голос
/ 16 марта 2012

Это сработало бы на Java. В C # вам нужно передать L в конструктор OL:

public OL(dynamic O, L parent)
{
   this.service = parent.service;
}

Кстати, ваш конструктор не будет компилироваться, у вас есть два OL s и return.

Кстати, 2, почему вы используете так много динамики?

0 голосов
/ 16 марта 2012

Если вы хотите, чтобы один экземпляр service существовал для всех экземпляров ваших классов, объявите его как static.Например:

static IOrganizationService service;

Тогда в вашем вложенном классе вы можете обратиться к нему по L.service.

0 голосов
/ 16 марта 2012

Сделайте что-нибудь вроде этого:

public class OL
{
    dynamic olService = nnull;
    public OL OL(dynamic a)
    {
          this.olService = parent.service; // <- doesn't compile
          //return this; //remove this !!!!
     }
}

РЕДАКТИРОВАТЬ

Просто обратите внимание: старайтесь не использовать dynamic, пока вам это действительно не нужно.Максимально используйте сильные типы в языке C#.

...