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

C#属性,这是一种糟糕的做法吗?

C#属性是一种用于封装类的成员变量的特殊语法结构,它提供了一种简洁、安全和可控的方式来访问和修改类的状态。在大多数情况下,使用属性是一种良好的做法,但并非没有缺点。

优势:

  1. 封装性:属性允许我们隐藏类的内部实现细节,并通过公开的访问器方法来控制对类成员的访问。这提供了更好的封装性和安全性。
  2. 可读性:属性可以提供更加直观和易于理解的代码,使得类的使用者可以更清晰地了解如何访问和操作类的成员。
  3. 可控性:属性允许我们在访问器方法中添加逻辑,以便在对属性进行读取或写入时执行额外的操作,如验证、计算或触发事件等。

应用场景:

  1. 封装私有字段:属性可以用于封装类的私有字段,以便在外部访问时提供更好的控制和安全性。
  2. 计算属性:属性可以用于计算和返回基于其他成员的值,而不是直接存储该值。这在需要动态计算属性值的情况下非常有用。
  3. 数据验证:属性可以用于验证输入数据的有效性,并在设置属性值时执行相应的验证逻辑。

腾讯云相关产品和产品介绍链接地址: 腾讯云提供了丰富的云计算产品和服务,以下是一些与C#属性相关的产品和服务:

  1. 云服务器(CVM):腾讯云提供的弹性云服务器,可用于部署和运行支持C#属性的应用程序。详情请参考:https://cloud.tencent.com/product/cvm
  2. 云数据库MySQL版:腾讯云提供的MySQL数据库服务,可用于存储和管理与C#属性相关的数据。详情请参考:https://cloud.tencent.com/product/cdb_mysql
  3. 云函数(SCF):腾讯云提供的无服务器函数计算服务,可用于处理与C#属性相关的业务逻辑。详情请参考:https://cloud.tencent.com/product/scf

总结: C#属性是一种常用的编程语言特性,它提供了封装、可读性和可控性等优势。在大多数情况下,使用属性是一种良好的做法,可以提高代码的可维护性和可读性。然而,对于特定的应用场景和需求,开发人员需要综合考虑使用属性的利弊,并根据具体情况做出决策。

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

相关·内容

编写干净C#代码技巧

在需要时候添加注释 这是我们所有开发人员都讨厌事情,不是?然而,从长远来看,添加几行评论/描述方法确实能帮助你和其他开发人员。...这是一种更简洁编写代码方式。 删除未使用代码 通常会有注释掉未使用代码做法,这最终会增加应用程序编译时代码行数。你不应该这样做。您可以使用像Git这样源控件来确保您可以在任何时候恢复。...使用方法链接 这是Microsoft在默认生成代码中广泛使用一种常见技术。在这里,每个方法返回一个对象,这些函数将被链接在一起。认识?这是方法链接一个很好例子。...Age is " + student.Age; } 从C# 6开始,引入了String Interpolation功能。这提供了一种更具可读性和凉爽性语法来创建格式化字符串。...我们添加了一个try-catch块并忽略了错误处理,对?处理此类错误并将其记录到表或磁盘是一种很好实践。

24730

关于是否在C#中加入不可空引用类型争论

来自微软Mads Togersen在近期所提出一条提议,即在C#语言中加入对不可空引用类型支持在.NET社区中引起了热烈争论。...这一点非常糟糕。 该提议在泛型方面还有待改善,它完全没有提及在大量泛型代码中将不允许使用default(T)这一事实。这一点对于现有的代码将产生怎样影响?可以采取哪些解决手段?...那些确实需要这一功能类型又将如何实现default(T)效果?这些问题都还没有进行充分探索。 这种方式岂不是会允许数组包含一些无效初始值?...或者因为我记得这是一段陈旧代码,因此我将始终进行空检查。而在实际情况下,由于“T即代表着不可空T”,因此我无需再进行空检查。如此一来,这段程序就会在我对空指针进行取值时崩溃。...Number127建议将静态分析作为一种替代方案: 遗憾是,目前来看,如果要以一种优雅方法引入不可空引用类型,会造成过多兼容性问题。

1K50
  • 编程之魂之C# – 与C#之父Anders访谈

    在Delphi中,我们在面向组件模型上面做了大量工作,比如说属性和事件等等。 有关这一点,我也把它用在了C#上面,这肯定是公认。我试图一 直把握社区最新动态,力争与时俱进。...此外,在并发领域,我们能让语言指定一种特定并发模型,但是,这是一 种错误做法。我们必须从整体角度来审视,找出语言缺乏什么能力,而这种能力会使得人们能够实现用于并发大库和大语言模型。...虽然只是花费很少精力,但它功效却能同其他做法一样或者是超过其他做法这是事半功倍精要。这不是用更多东西完成更多事情,而是使用一个简单表层。...既然我们无法重新开始,我们就不能这么做,因为这是非常基础东西,我们不能通过接连出击而从根本上改变它属性。我们唯一能做是使它变为双头兽,而这并不是我们想要结果。...显然,对于编程来说,这是一种不同角度,而且它会让你以一种不同观点来看待问题,我发现这是非常、非常有用

    81520

    Kotlin 和 Checked ExceptionKotlin 和 Checked Exception

    我不明白为什么每当出现一个 JVM 语言,就有人欢呼雀跃,希望它会取代 Java,似乎这些人跟 Java 有什么深仇大恨。他们已经为很多新语言热血沸腾过了,不是?...大部分人只能在里面放一条 log,记录异常发生。这是一种非常糟糕写法,不但繁复,而且可能掩盖运行时错误。...,这种做法也就是我在微软 C# 代码里经常看到。...…… 注意到了吗,这种给每个函数加上 throws Exception 或者 catch (Exception) 做法,也就是我在《编程智慧》里面指出经典错误做法。...CE 只提供了一种机制,至于程序员怎么使用它,是他们自己职责。再好特性被滥用,也会产生糟糕结果。Hejlsberg 对这些问题使用了站不住脚理论。

    71520

    C#:昨天,今天和明天:和 Anders Hejlsberg 座谈,第一部分

    Hejlsberg:是这样。 Osborn:从那是起,五年过去了,C#现在怎么样了,你现在对语言有什么想法C#是微软唯一工具?是否在社区里有一个很宽领域? Hejlsberg:是这样。...Osborn:这是我后面要问你问题。 Hejlsberg:这些数字这有一点不行,我们应该在某种程度上修改一些东西。但除此之外,已经有第三方独立C#实现了。这就是大家都知道Mono。...C# 语言作为面向组建语言 Osborn:当你在2000介绍C#语言时候,一个很厉害武器是这是第一个面向组件语言。在过去五年中,这一点改变了吗? Hejlsberg:哦,当然,变得更好。...很久以前,甚至最近,编程仍然是一个辅助工具,这些工具仍然倾向于这样一种编程模型:设计界面,在这上面放上组件,然后修改属性,并加上代码。...我总觉得属性,事件,方法是如此重要,应该作为语言一等公民来对待,这就是我们在C#上所做工作。老实说:我也听到了一些对属性抱怨。这其实是个屁事,你明白我意思

    56580

    笑说设计模式-小白逃课被点名

    分类 工厂模式可以分为三种,其中简单工厂一般不被认为是一种设计模式,可以将其看成是工厂方法一种特殊。...老师:”这样当然是没有错误,但是问题在于,我只是增加了一个新运算符号,却需要让加减乘除所有的运算都参加编译,如果在修改过程中不小心修改了其他代码,例如把+号改成了-号,那不是很糟糕,这就违背了开闭原则...【对扩展开放,对修改关闭】“ 小白挠一挠头问道:”开闭原则,这是什么?...这是工厂方法体现。可是如果有3个不同工厂,他们分别都生产苹果和橘子呢。 小白:“恩...那就多建立几个工厂。...其实做法非常简单,对昨天代码进行一些修改即可” 水果抽象类 新增一个Name属性,方便后期打印不同工厂。

    39850

    关于初学Go语言一些事

    或者是学习一门新语言时候,这个map不就是之前dict,只是稍稍不同而已,这个struct不就是C中struct嘛。 这就是人类,本能属性这是个优点。...其实写多了发现比C要简单多了,对于一个在用Python战斗的人来说,我必然得把它映射到Python上。你看那main不就是python中 if __name__ == "__main__" 。...从这几天写代码来看,代码量确实接近Python。使用起来像Java还是因为我早先是做Java程序,当然了如果我从C#直接转到Python的话我会说像C#。至于为啥,请参考上面。...编译完直接可用 这确实是相当不错做法,把上面的代码保存成hellowrold.go,然后执行go build helloworld.go,立马生成当前平台可执行文件,只有一个文件,没有什么dll或so...有人在群里问了,像C#或者VB,生成可执行文件同时还可以生成dll文件,方便升级。但那是客户端做法,我觉得在服务器端升级时直接在build一个然后放到服务器上就好了。比部署python简单多了。

    45120

    Nullable Reference Types 可空引用类型

    C# 8可以让你在编译时就避免null引用错误,它并不是把null值从代码里移除了,而是它可以让你表达意图。具体做法就是你可以告诉编译器哪个引用可能是null,而哪些引用不可能是null。...例子: 有两个类,Person类Address属性类型是另外一个类: ? 现在可以看到,这些属性都出现了波浪线警告,如果我们build一下这个项目,那么也会出现很多警告: ?...这是因为我们把这两个类成员声明称了非null引用类型,而我却没有对它们进行初始化。...另外一种办法就是直接对属性进行初始化: ? 我们还是采用构造函数初始化办法吧。 往构造函数里传递null 那么往构造函数里面传递null会出现什么情况呢?试一下: ?...提示还是比较智能,有警告,它说无法把null这个字面值转化为非null引用类型。 另一种开启nullable检查方式 如果把老项目的项目文件直接添加以下内容: ?

    81230

    在.NET中执行AsyncAwait两种错误方法

    在.NET中执行异步/等待两种错误方法 在应用开发中,我们为了提高应用程序吞吐能力或者异步操作来减少耗时,通常会使用多线程来达到目的,而在C#语言中由于async/await必杀技存在,大多会使用此来简化多线程操作...,async/await具体使用方式想必大家已烂熟于心,不再赘述,今天主要谈谈在我们经常所谓async/await操作真的是正确?...(Task.Run) 这是多余。如果该方法已经返回Task,则我们不应该将其包装在另一个Task中。...这是正确,但仅是非常片面的。Async/Await目的是帮助提高吞吐量。改善性能仅仅是副作用。...总结一下,以上代码非常糟糕,因为实现异步好处是通过在线程不执行任何操作(例如,等待服务响应)时“释放”线程来提高吞吐量。

    1.4K10

    在Java中如何理解面向接口编程,荐读篇

    (2)解释开始 面向实现,就是在面向对象编程时候,当我们要控制某个类对象,那么我们会直接在当前程序中(自身类)中,实例化该类,然后通过该类调用相应方法。这是一种最基本面向对象编程模式。...你觉得这是什么编程,或则说你觉得,这个饲养员面向是什么?对象?对,依然是,但是是属于更为抽象一个对象(动物),而因为它面向得更为抽像,导致,外界更新基本不需要改他改变。...并且也不会让检疫员调用到“吃”这个方法,这是一种“隔离”,也是一种安全措施。 也许到现在有些人有点模糊了。...这就是我们要理解自然界中事物,通常只属于某一个类。也就是说鸡就是动物类,不应该属于其他类。 这种做法和不合理。要知道在这种做法背景下,类只能继承一个类哦。...我们再看看,不同类东西,也有相同属性,是否我们能够更具这些属性来分类呢?

    1.1K10

    之所以被裁也许是少了这些东西

    人们总是认为我懂很多。 这种想法并不那么差劲,所以我对此并不排斥。 (不过有少数人尽管知识渊博,但他们往往遭受相反偏见,这很糟糕。)...(因为我使用C#,所以可能会接受它。) 算法。没有什么比美好一天被冒泡排序或者快速排序毁掉更糟糕事了。 如果它们与特定实际问题联系在一起,我可以完成简单图形遍历任务。...虽然知道O(n)符号是怎么回事,但我理解也仅限于“不要在循环中放置循环”。 函数式语言。我不了解任何一种函数式语言,除非你把JavaScript算进去。...(我只会C#和JavaScript —— 不过我已经忘记了C#大部分内容。)我很难看懂LISP启发(如Clojure),Haskell启发(如Elm)或ML启发(如OCaml)编写代码。...就我而言,Map和reduce才是最重要。 我不知道什么幺蛾子半群,算子之类东西。我知道什么是monad,不过也许这是一种幻觉。 现代CSS。我不知道Flexbox或Grid。

    49420

    高级码农反思录:我当菜鸟时不懂七件事

    你一定非常不想从中获得糟糕经验或糟糕领导! 所以,在申请或接受任何工作之前,你要: 研究这家公司 在 Glassdoor 和互联网上搜索这家公司、登录他们网站,找一些关于这家公司评论。...他们有代码审核?他们分支管理策略是什么样?); 测试相关问题(他们用什么样方法进行测试?他们有专门做测试工程师?); 公司文化(这家公司氛围轻松?...有趣是,我最后什么都没学好。 一会学 Java,一会学 JQery,一会学 C#,一会学 C++…… 我没有专注于一种语言,而是根据那天心情在不同语言间跳跃。...如果你想在后端发展,那就选一种语言并好好学。你不需要了解 Python、Java 和 C#!...你想给别人留下深刻印象。最好方法是做什么呢?用你学过极其花哨编码技术来完成项目,对? 不对。 这是我犯过一个主要错误,也是初级开发人员常犯错误。

    59520

    gRPC遇见.NET SDK和Visual Studio:构建时自动生成编码

    这是有道理,因为程序包只包含编译器、代码生成器和导入文件,这些在.proto文件编译项目之外是不需要。虽然,在这个简单演练中并非严格要求,但始终应该是你标准做法。...但是,如果你更改了helloworld.proto源代码,那么在构建期间它输出将被重新生成,然后由C#编译器重新编译。这是你期望修改任何源文件常规依赖关系跟踪行为。...这是.NET构建常规做法,因此自动生成文件,不会使工作目录混乱,或意外地置于源代码控制之下。否则,调试器等工具可以访问它们。...该软件包还扩展了Visual Studio属性”窗口,因此你可以在Visual Studio界面中为每个文件设置一些选项。...分享你经验 与任何复杂功能初始版本一样,我们很高兴收到你反馈。有什么不符合预期工作?你有不容易用新工具覆盖场景?你是否知道如何改善工作流程?

    2K20

    成员可能是null

    C# 8可以让你在编译时就避免null引用错误,它并不是把null值从代码里移除了,而是它可以让你表达意图。具体做法就是你可以告诉编译器哪个引用可能是null,而哪些引用不可能是null。...image.png 这是因为我们把这两个类成员声明称了非null引用类型,而我却没有对它们进行初始化。...解决成员上出现警告 使用构造函数对成员初始化,可以去掉这些警告: image.png 另外一种办法就是直接对属性进行初始化: image.png 我们还是采用构造函数初始化办法吧。...另一种开启nullable检查方式 如果把老项目的项目文件直接添加以下内容: image.png 那么项目在编译时候很可能出现大规模问题。...所以一点一点启用nullable检查是比较好做法

    59631

    一文解决现代编程语言选择困难:命令式编程

    map(post => post.comments) .flat();} 无法获取部分数据而导致整个程序崩溃,这显然并非一种做法。尽管我们不希望发生这种情况,但它的确会发生。...一种做法是手工检查是否生成异常,但是在编程过程中可能会忘记对异常做检查,因此这种做法是非常不可靠,而且会在代码中添加大量额外处理。...尽管是一种面向对象语言,但 C# 在解决模板代码问题上比 Java 有所改进。很高兴看到 C# 每个新版本都能改进语法。...TypeScript 由同是 C# 设计者 Anders Hejlsberg 设计,因此代码看上去非常类似 C#,可认为是一种用于浏览器 C#。 语言家族:C。...换句话说,TypeScript 具有 JavaScript 所有缺点。一种糟糕语言超集并不会变身成为一种优秀语言。

    1.2K30

    使用C# (.NET Core) 实现单体设计模式 (Singleton Pattern)

    这是个鸡和蛋问题: 我可以使用MyClass里面的构造函数, 但是我无法实例化这个对象, 因为其他类无法使用 "new MyClass()"....A: 你着确实是一种观点, 那么下面代码是什么意思呢?...而且可能比你想糟糕: 只有第一次执行该方法时候synchronized才起作用, 一旦我们设定好了成员变量那个引用到具体实例, 以后就不需要synchronized这个方法了, 除了第一次, 以后这就是额外开销...其他问题 Q: 如果我创建一个类, 里面都是静态方法和静态变量, 那么它效果和单体模式不是一样? A: 是的, 如果你类没有其他依赖并且初始化并不复杂的话. Q: 可以继承单体模式?.../.NET Core异步和多线程文章(也会是书上内容, 这本书叫 C# 7 in a Nutshell, 我认为这是最好C#/.NET Core参考书, 可是没有中文, 所以我就是做一下翻译和精简

    97940

    C# 8.0 中模式匹配

    我们见证了模式开始成形,然后变成非常强大且有趣语言补充过程。正如其他语言功能彻底改变了软件编写方式一样,我希望 C#模式匹配也会产生类似效果。 不过,我们真的需要另一种语言功能?...缺少部分就是将绿色苹果筛选出来方法。你见过异常筛选器这是 C# 6.0 中引入功能,使用它可在仅满足特定条件时捕获特定异常。此功能引入了 when 关键字,它也适用于模式匹配。...其他部分运行方式与你自 C# 1.0 以来一直使用普通 switch 相同。这个示例完全是使用 C# 7.0 编写,那么问题来了,还有改进空间?我会说有。...这意味着解构对象,并查看对象类型、对象类型属性、对象类型属性类型等表达方式,然后应用所有上述内容匹配。这看似复杂,但实际上并不复杂。 接下来介绍一种不同类型及其结构。...您明白了吧ЎЈ这是一种非常灵活且有趣方法,可用于处理前文中代码非常冗长且畸形冗长导致可读性过差情况。

    1.9K10

    我为何需要使用空接口?

    表面上,这是合理:毕竟,这样使用继承是一种沿用已久设计模式,那么,它可能有什么问题?我们发现,这种设计有这样一些问题: • 上面的继承层次用来给 Thing1 和Thing2 增加行为。...换一种做法, Thing1 和Thing2 可以使用PersistentObject 提供某种功能, 使它们内部状态持久。...这当然是一个极其糟糕消息:你不仅要改变你服务器中对象实现,还要找到并更新所有正在使用你对象客户,因为它们突然有了一种全新类型。...更糟糕是,你无法让它们向后保持兼容:或者让所有客户随着服务器发生改变,或者一个客户都不改变。要想让某些客户“不升级”,这是不可能。 • 这种设计不能扩展到支持多种特性。...设想一下,我们有另外一些行为,对象可以继承它们,比如序列化、容错、持久,以及用搜索引擎进行搜索能力。我们很快就会陷入多重继承泥淖。更糟糕是,每种可能特性组合都会创建一种完全独立类型层次。

    49250

    使用 ChatGPT 提高代码质量并减少技术债

    前言 OpenAI ChatGPT 是一种先进的人工智能语言模型,因其能够解释人类编写文本并生成书面散文和编程代码响应而脱颖而出。...最终代码可能是误报。糟糕 API 建议可能是错误,因为该方法用户希望应用程序以某种方式返回计算出暗度。方法类型为 void 表明了这种期望。...: 这段代码有几点需要讨论: 接口隔离原则 (ISP):这是 SOLID 原则之一。...NotImplementedException 用法:实现接口然后为不想使用方法抛出 NotImplemented 异常是一种不好做法。...您可以通过突出显示您代码,直接要求这些扩展生成优化且高效代码建议。 文档帮助——这些由 AI 驱动扩展可以帮助为 C# 方法、属性和类编写 XML 注释,从而确保代码库有良好文档记录。

    25710
    领券