gpt4 book ai didi

c# - Java 的静态概念与 C# 的有何不同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:49 25 4
gpt4 key购买 nike

我正在阅读 Josh Bloch 的书Effective Java,他建议在构建具有大量成员的对象时使用构建器设计模式。据我所知,这不是 Vanilla 设计模式,而是看起来像他的变体。我更喜欢它的外观,并试图在我正在编写的 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# 中,最后,这个也很重要,这是线程安全的吗?

最佳答案

public static class 在 Java 中意味着你定义一个静态嵌套类。这意味着它在逻辑上包含在另一个类中,但它的实例可以在不引用其外部类的情况下存在。非静态嵌套类称为“内部类”,它的实例只能与外部类的实例相关联地存在。

在 C# 中,静态类 是一种不能实例化的类,因此不能有任何非静态成员。在 Java 中没有直接的语言级别等效于此构造,但您可以通过仅提供私有(private)构造函数轻松地阻止 Java 类的实例化。

简短的 Java 回顾:

  • 在另一个类中定义的所有类都是“嵌套类”
  • 不是static的嵌套类称为内部类
  • 内部类的实例只能与外部类的实例相关
  • static 嵌套类没有单独的名字
  • static 嵌套类在很大程度上独立于它们的外部类(除了一些特权访问)。

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

关于c# - Java 的静态概念与 C# 的有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/512651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com