当前位置:  开发笔记 > 编程语言 > 正文

Java的静态概念与C#的不同之处是什么?

如何解决《Java的静态概念与C#的不同之处是什么?》经验,为你挑选了1个好方法。

我正在阅读Josh Bloch的书" Effective Java",他建议在构建具有大量成员的对象时使用构建器设计模式.从我所看到的不是香草的设计模式,而是看起来像他的变化.我更喜欢它的外观,并试图在我正在编写的C#Web应用程序中使用它.这是用Java编写的代码并且工作得很好

public class Property { 

    private String title;
    private String area;

    private int sleeps = 0;

    public static void main(String[] args) {

        Property newProperty = new Property.Builder("Test Property").Area("Test Area").Sleeps(7).build();

    }

    private Property(Builder builder) {
        this.title = builder.title;
        this.area = builder.area;
        this.sleeps =builder.sleeps;
    }

    public static class Builder{
        private String title;
        private String area;

        private int sleeps = 0;

        public Builder (String title){
            this.title = title;
        }

        public Builder Area(String area){
            this.area = area;
            return this;
        }

        public Builder Sleeps(int sleeps){
            this.sleeps = sleeps;
            return this;
        }

        public Property build() {
            return new Property(this);
        }
    }   
}

当我把它放入我认为是C#的等价物时

 public class Property
    {
    private String title;
    private String area;

    private Property(Builder Builder)
    {
        title = Builder.title;
        area = Builder.area;
    }


    public static class Builder
    {
        // Required parameters
        private String title;
        private String area;

        // Optional parameters
        private int sleeps = 0;

        public Builder(String val)
        {
            this.title = val;
        }

        public Builder Area(String val)
        {
            this.area = val;
            return this;
        }

        public Builder Sleeps(int val)
        {
            this.sleeps = val;
            return this;
        }

        public Property build()
        {
            return new Property(this);
        }
    }
    }

然后我得到编译器警告.他们中的大多数"无法在静态类中声明实例成员".

所以我的问题首先是我错过了什么?如果我错过了某些东西,我可以按照Josh Bloch推荐的方式进行,但是在C#中,最后,这一点也很重要,这是线程安全吗?



1> Joachim Saue..:

public static class在Java中意味着您定义了一个静态嵌套类.这意味着它在逻辑上包含在另一个类中,但它的实例可以存在而不引用它的外部类.非静态嵌套类称为"内部类",它的实例只能存在于外部类的实例中.

在C#中,a static class是无法实例化的,因此不能拥有任何非静态成员.在Java中没有与此构造等效的直接语言级别,但您可以通过仅提供私有构造函数来轻松地防止Java类的实例化.

简短的Java回顾:

在另一个类中定义的所有类都是"嵌套类"

嵌套的非类的类static称为内部类

内部类的实例只能与外部类的实例相关

static 嵌套类没有单独的名称

static 嵌套类在很大程度上独立于其外部类(某些特权访问除外).

如果一些C#guru告诉我们如何在C#/ .NET中处理内部/嵌套类,我会很高兴.


我不是大师,但是c#内部类总是可以独立于外部类的实例而存在.我不知道c#中的一个构造只允许内部类通过它的外部类存在,除非它可能是私有的,所以只有外部类可以使用它.
推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有