C#指父母

时间:2012-03-16 09:06:24

标签: c# oop parent-child

对不起我的愚蠢,但我正在寻找一种方法从连接到服务的类构造一个对象,并且还包含另一个具有该服务方法的类。

我面临的问题是试图想出一种只需连接一次服务的方法。我拒绝使用全局变量等。

我发现很难理解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 个答案:

答案 0 :(得分:1)

那可以在Java中使用。在C#中,您需要将L传递给OL的构造函数:

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

顺便说一下,你的构造函数不会编译,你有两个OL和一个return

顺便说一下,你为什么要使用这么多动态?

答案 1 :(得分:0)

做这样的事情:

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

编辑

请注意:在您真正需要之前,请尽量不要使用dynamic。尽可能使用C#语言中的强类型。

答案 2 :(得分:0)

如果您希望所有类的实例都存在单个service,请将其声明为static。 e.g:

static IOrganizationService service;

然后在您的嵌套类中,您可以通过L.service引用它。