首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么没有人接受C#中的公共字段?

在C#编程语言中,公共字段(public fields)通常不被推荐,因为它们可能导致以下问题:

  1. 数据封装和抽象:公共字段破坏了类的封装特性,使得类的实现细节暴露在外部,不利于代码的维护和扩展。
  2. 代码可读性:公共字段可能导致代码可读性降低,因为其他开发者在查看代码时可能无法确定这些字段的用途和作用。
  3. 代码维护:公共字段可能导致代码维护困难,因为在修改字段时可能会影响到其他依赖该字段的代码。

因此,在C#编程中,更推荐使用属性(properties)来代替公共字段,以保证代码的封装性、可读性和可维护性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么 C# string.Empty 是一个静态只读字段,而不是一个常量呢?

进一步可以发现 string.Empty 实际上是一个静态只读字段,而不是一个常量。 为什么这个看起来最适合是常量 string.Empty,竟然使用静态只读字段呢?...string.Empty 字段在整个 String 类型你都看不到初始化代码,String 类静态构造函数也不会执行。也就是说,String 类所有静态成员都不会被托管代码初始化。...从上文中 string.Empty 注释描述可以知道: 编译器会将 C# 语言编译成中间语言 MSIL; 如果这是一个常量,那么编译器在不做特殊处理情况下,就会生成 ldstr "",而这种方式不会调用到...关于使用不安全代码转换字符串方法可以参见: C# 字符串首字符大写 - 林德熙 .NET/C# 编译期间能确定相同字符串,在运行期间是相同实例 - 吕毅 "" 和 string.Empty 到底有什么区别...---- 参考资料 String.CoreCLR.cs Intrinsic 在C# String.Empty和 “” 有什么区别?

1.1K00
  • ​2021-03-06:go公共变量是协程安全吗?赋值操作是原子吗?为什么

    2021-03-06:go公共变量是协程安全吗?赋值操作是原子吗?为什么? 福哥答案2021-03-06: 这是面试中被问到。实力有限,真正答案还不知道。...我想法是a=1是原子操作,a=b不是原子操作。实际开发,不大可能是a=1这种情况,可以说是协程不安全。...所以公共变量非协程安全,赋值操作是否原子跟变量类型及机器架构有关(指令集)。...葡萄❤柠檬 16:06:47 为什么io密集型,线程数是2倍呢?....github.io 16:28:09 今天每日一题是我过最快一次 题078_ Tnze 10:27:04 公共变量不是协程安全,赋值操作不是原子 Tnze 10:27:45 这是由于线代多核

    1.3K10

    C# 继承、多态性、抽象和接口详解:从入门到精通

    C# 继承在 C# ,可以将字段和方法从一个类继承到另一个类。我们将“继承概念”分为两类:派生类(子类) - 从另一个类继承类基类(父类) - 被继承类要从一个类继承,使用 : 符号。...为了实现安全性——隐藏某些细节,只显示对象重要细节。注意:抽象也可以通过接口实现C# Interface接口是在 C# 实现抽象另一种方式。...默认情况下,接口成员是抽象和公共。注意:接口可以包含属性和方法,但不能包含字段。要访问接口方法,接口必须由另一个类“实现”(有点像继承)。要实现接口,请使用冒号符号(与继承一样)。...接口可以包含属性和方法,但不能包含字段/变量。接口成员默认是抽象和公共。接口不能包含构造函数(因为它不能用于创建对象)。为什么以及何时使用接口?...为什么以及何时使用抽象类和方法?为了实现安全性——隐藏某些细节,只显示对象重要细节。注意:抽象也可以通过接口实现C# 接口接口是在 C# 实现抽象另一种方式。

    37610

    轻松理解.NET控制反转和依赖注入

    C# ,DI 可以通过各种形式实现,包括构造函数注入、属性注入和方法注入。 实现依赖注入方式 构造函数注入:通过类构造函数提供依赖关系。这是 C# 中最常见和推荐 DI 形式。...属性注入:通过类公共属性分配依赖关系。这种方法提供了灵活性,但可能暴露内部状态,减少封装性。...MyClass 类通过在 MyMethod 方法接受一个 IMyDependency 参数使用方法注入,允许外部实体在调用该方法时直接提供依赖,从而确保依赖管理灵活性和解耦。...在 C# 实现 IoC 和 DI 在 C# ,有多种框架和工具可以实现 IoC 和 DI,其中 Microsoft.Extensions.DependencyInjection 是 .NET 生态系统中最著名...将 IoC 和 DI 集成到您 C# 应用程序,您将采用一种面向未来软件架构方法,确保您代码保持敏捷,并适应不断变化软件开发需求。

    12710

    C# 面向对象编程解析:优势、类和对象、类成员详解

    当创建单个对象时,它们继承自类所有变量和方法。 C# 类和对象 在C#,一切都与类和对象以及它们属性和方法相关。例如,在现实生活,汽车是一个对象。...虽然不是必需,但是当命名类时以大写字母开头是一个良好做法。此外,C#文件名称通常与类名称匹配,这样使得我们代码更有组织性。但这不是必需(就像在Java中一样)。.../字段(myObj.color) C# 多个类和对象 多个对象 您可以创建一个类多个对象: class Car { string color = "red"; static void Main...它被称为访问修饰符,它指定 Car color 变量/字段对其他类(例如 Program)也是可访问 C# 类成员 在C#,类内字段和方法通常被称为"类成员": // The class class...原因很简单:静态方法可以在不创建类对象情况下访问,而公共方法只能由对象访问。

    12410

    C#设计模式01——单例模式三种写法

    C#单例模式是一种创建对象设计模式,它保证一个类只有一个实例,而且它很容易被访问。在C#,可以使用静态变量来实现单例模式,同时使用私有构造函数和公共静态方法来保证单例模式实现。...为什么要使用C#单例模式?...C#单例模式在许多场合下是非常有用,它可以确保一个对象实例只被创建一次,并且在整个应用程序只有一个实例存在,这种方式可以减少资源浪费,提高系统性能,同时可以更方便管理和调用实例。...我们使用一个私有的构造函数和一个静态变量来创建一个单例实例,然后使用一个公共静态方法返回该实例。...当第一次访问 `Instance` 属性时,会创建一个新 `Singleton` 实例,在随后调用返回相同实例。

    65410

    Java开发 2019秋招 面经整理

    面试遇到问题整理如下,仅供参考 计算机网络 TCP、UDP在哪一层?它们之间有什么差别,哪一个传输效率更高,为什么?分别用于什么场景? HTTP和HTTPS差别,在哪一层?...树和B树区别 B树在什么场景下用 内连接和外连接区别 数据库建立索引在哪些字段建立 事务基本特性,详细解释一下 介绍一下索引,索引优点缺点,为什么加了索引之后新增、更新、删除会变慢?...如果更新非索引字段,速度会受到影响么?...求两个字符串最长公共子字符串 冒泡排序以及斐波那契递归版本 快排 实现一个栈,有push和pop方法,还有可以获取最小值O(1) 两个字符串a 和 b ,判断下b 是不是 a 打乱顺序后结果。...C#、Java这些语言区别 C#和Java区别 C#、Java和C、C++区别 C# 和Java值传递和引用传递区别 C# 索引器 C#委托 怎么保存用户状态 c#垃圾回收和java垃圾回收

    89010

    C# 面向对象编程进阶:构造函数详解与访问修饰符应用

    它可以用于为字段设置初始值: 示例 获取您自己 C# 服务器 创建一个构造函数: // 创建一个 Car 类 class Car { public string model; // 创建一个字段...所有类默认都有构造函数:如果您自己不创建类构造函数,C# 会为您创建一个。然而,这样您就无法为字段设置初始值。 构造函数参数 构造函数还可以接受参数,用于初始化字段。...C# 具有以下访问修饰符: 修饰符 描述 public 代码可供所有类访问 private 代码只能在同一类访问 protected 代码可以在同一类访问,或在从该类继承访问 internal...要实现这一点,您必须: 将字段/变量声明为 private 通过属性提供 public get 和 set 方法来访问和更新 private 字段值 属性 private 变量只能在同一类访问(外部类无法访问它...还提供了一种使用简写/自动属性方法,您无需为属性定义字段,只需在属性编写 get; 和 set;。

    15410

    .NET面试题系列 - C# 基础知识(1)

    这也是为什么很多老外C#书籍前几章内容好像都是些“毫无意义”,“莫名其妙”东西。...参考资料: http://www.cnblogs.com/anding/p/5229756.html CLR via C# 1.1 公共类型系统(CTS) 公共类型系统(CTS)是用来描述IL,它规定了...这两者均位于基础类库mscorlib。 1.6.2 实例构造函数(类型) 类型实例构造函数不能被继承。它负责将类型实例字段初始化。对于静态字段,由静态构造函数负责。...如果我们不了解堆上内存分配方式,对静态构造函数理解会十分困难。为什么是在创建第一个实例之前?为什么不能直接调用?为什么不能有参数?我们完全无法理解,只能通过死记硬背方式记住这些性质。...为什么静态构造函数既没有访问修饰符,也没有参数?这是因为静态构造函数只负责初始化静态成员,只负责维护类型对象,它和类型实例对象没有关系,所以你加入任何参数(你试图为非静态字段或属性赋值?

    1.9K20

    C# 通过反射初探ORM框架实现原理

    背景:   以前学Java进行开发,多用到Mybatis,Hiberante等ORM框架,最近需要上手一个C#项目,由于不是特别难,也不想再去学习C#ORM框架,所以就想着用反射简单实现一下ORM...反射:   Java和C#反射大体相同,主要是指程序可以访问,检测和修改它本身状态或行为一种能力,并能根据自身行为状态和结果,调整或修改应用所描述行为状态和相关语义。...我理解就是可以程序运行时动态获取对象属性和方法,并且可以进行与之相关调用。 首先看一下C#反射实现方式:   获取Type对象,反射操作都需要通过Type对象来进行。...14 ExampleClass Ex2 = (ExampleClass)ct2.Invoke(obj);     获得所有公共字段 1 2 // 获取到所有公共字段...f.SetValue(newObj, r[name]);     这里就介绍这几个方法,通过反射可以获得类所有信息,并且可以进行调用,还可以打破封装(不安全)  练习   下面就是通过反射将从数据库获取到结果集自动封装到

    1.2K00

    C# 通过反射初探ORM框架实现原理

    背景:   以前学Java进行开发,多用到Mybatis,Hiberante等ORM框架,最近需要上手一个C#项目,由于不是特别难,也不想再去学习C#ORM框架,所以就想着用反射简单实现一下ORM...反射:   Java和C#反射大体相同,主要是指程序可以访问,检测和修改它本身状态或行为一种能力,并能根据自身行为状态和结果,调整或修改应用所描述行为状态和相关语义。...我理解就是可以程序运行时动态获取对象属性和方法,并且可以进行与之相关调用。 首先看一下C#反射实现方式:   获取Type对象,反射操作都需要通过Type对象来进行。...14 ExampleClass Ex2 = (ExampleClass)ct2.Invoke(obj);     获得所有公共字段 1 2 // 获取到所有公共字段...f.SetValue(newObj, r[name]);     这里就介绍这几个方法,通过反射可以获得类所有信息,并且可以进行调用,还可以打破封装(不安全)  练习   下面就是通过反射将从数据库获取到结果集自动封装到

    672100

    欢迎来到 C# 9.0(Welcome to C# 9.0)

    记录(record)隐式定义了一个受保护(protected)“复制构造函数”——一个接受现有记录对象并逐字段将其复制到新记录对象构造函数: protected Person(Person original...如果您不喜欢生成 Equals 重写默认逐个字段比较行为,您可以自己编写。您只需要注意理解“基于值相等”是如何在记录(record)工作,特别是在涉及继承时,我们后面会讲到。...为了对这种常见情况进行优化,记录(record)更改了 string FirstName 这种形式简单成员声明默认含义,与其他类和结构体声明隐式私有字段不同,它被当作是一个公共、仅初始化(init-only...四、改进模式匹配(Improved pattern matching) C# 9.0 添加了几种新模式。...例如,null 和 lambda表达式始终是目标类型。 在 C# 9.0 ,一些以前不是目标类型表达式变得可以由其上下文推导。

    1K30

    线程安全知多少

    静态成员,顾名思义就是static关键字修饰成员。实例成员,就是对类型实例化创建对象实例才能访问到成员。 然后,为什么它可以确保所有的公共静态成员是线程安全呢?...首先前两个公共静态字段因为被readonly修饰,只读不可写,所以是线程安全。 后面两个静态方法因为没有涉及到对临界资源操作,所以也是线程安全。...那针对这个StopWatch来说,保证线程安全机制是: 使用readonly修饰公共静态字段 公共静态方法不涉及对临界资源操作。 2.2....这里为什么可以自信保证所有public和protected 成员是线程安全呢?...而关于线程同步方式,可参考C#编程总结(三)线程同步。 另外在书写代码时,为了避免潜在线程安全问题,对于不需要改动公共静态变量,使用readonly修饰不失为一个很好方法。 4.

    64450

    03.SQLServer性能优化之---存储优化系列

    ,所以难免出错,如有错误欢迎指正,小子勇于接受批评~(*^__^*) ~ 水平分库分表和垂直分库分表,大家都经常谈,我说下我理解,看图: ?...有时候会做一些处理来尽量避免跨库Join 比如说表A,表B,表C...常用全局表我会把他们每个数据库存一遍,这样就方便多了(注意一下数据同步哦) 还有就是冗余一些字段 比如:产品表有这些字段:商品展图...这个过程可以通过应用程序去完成,毕竟可以根据路由表来统一汇总 排序就比较蛋疼了,如果是按时间(分表字段还好,因为我们路由表就是按时间分表,相对简单。如果按照某个字段排序的话。。。。。...很多人总是疑惑为什么分页越往后面越慢(按时间不怕,我们就是按时间分表,你去对应时间区里面取就好了) 比如按字段1排序,每一页20条数据,要求取第一页数据==》 ?...支持Net,Java Ctrip DAL支持流行分库分表操作,支持Java和C#,支持Mysql和MSSqlServer。

    73350
    领券