动态元素与强类型元素

2024-04-07

我是一名 Web 开发人员,目前正在使用 mvc3 razor 和Umbraco https://en.wikipedia.org/wiki/Umbraco创建网络应用程序。我从事这项工作的时间不长,已经从使用动态元素转向使用强类型元素来遵循标准。

我从来没有真正得到过太多的理由,并且在线搜索似乎很清楚,跟踪和调试设置类型变量要容易得多,但我对在函数中使用它感到困惑。

例如,当使用 Umbraco Content 时,我现在已切换到 1Umbraco.TypedContent1。我猜测它返回一个强类型变量,但是除了调试之外它还有其他好处吗?


我的背景主要是 PHP 和 Python,但大约 3 年前转向 C#。无可否认,转向使用 C# 等强类型语言进行初级开发是一个学习曲线。有时它会让人感觉过于严格,尤其是与 C# 非常严格的继承相结合时。然而,强类型语言给你带来了很多东西。

首先,可能也是最重要的是编译时错误。对于像 Python 这样的动态语言,在应用程序运行并且出现运行时异常之前,没有任何迹象表明您使用了错误的类型。使用强类型语言,应用程序甚至无法构建,因此您的代码中通常不会出现定时炸弹。

其次,强类型语言可以高度优化。通过确保每个事物始终是特定类型,编译器可以优化内存分配和实际编译的汇编代码。

第三,强类型语言鼓励良好的编程实践。虽然强类型语言可能会让人感觉有些限制,但它会强制您的代码采用动态语言通常缺乏的结构。当然,这并不是说不可能用动态语言编写出好的代码,但这确实意味着当开发人员不花时间或不注意细节时,用动态语言可能会造成更大的损害比强类型的。

也就是说,C# 并不都是强类型的。也就是说,有一些令人讨厌的dynamic关键字,这个词经常被滥用,MVC 几乎鼓励使用动态,比如ViewBag. While dynamic可以占有一席之地,我建议尽可能避免它,因为您基本上放弃了使用强类型语言工作的所有好处。

还有泛型的概念。您可能在没有意识到的情况下使用泛型,但如果您感觉自己的编程受到过度限制,您可能应该更多地研究它们并学习如何真正利用它们带来的强大功能。这有点像动态类型,但它仍然在编译时设置,因此您不会失去任何带来的好处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态元素与强类型元素 的相关文章

  • 调用许多网络服务的最佳方式?

    我有 30 家子公司 每家都实施了他们的 Web 服务 使用不同的技术 我需要实现一个Web服务来聚合它们 例如 所有子公司的Web服务都有一个名为的Web方法GetUserPoint int nationalCode 我需要实现我的网络服
  • 当从后台工作程序发生事件时,XlCall.Excel(XlCall.xlcCalculateNow) 抛出 XlCallException

    我有一个 ExcelFunction 来排队一些计算 ExcelFunction public static void QueueCalcs takes ranges var calcRequests builds list of calc
  • 从 Invoke 方法获取 RETURN

    我正在尝试从另一个线程上的列表框项目中读取值 我尝试创建一种新方法来运行调用命令 我可以设法将命令发送到列表框 例如通过调用方法添加 但我似乎无法得到响应 我似乎无法获取该项目的值 我尝试了几种方法 一旦我将它从空变为字符串 事情就开始变得
  • 当其源是 https uri 时如何使 wpf MediaElement 播放

    在 wpf 独立应用程序 exe 中 我在主窗口中包含了 MediaElement
  • .pdbs 会减慢发布应用程序的速度吗?

    如果 dll 中包含 pdb 程序调试 文件 则行号将出现在引发的任何异常的堆栈跟踪中 这会影响应用程序的性能吗 这个问题与发布与调试 即优化 无关 这是关于拥有 pdb 文件的性能影响 每次抛出异常时都会读取 pdb 文件吗 加载程序集时
  • libtool 在 Ubuntu 13.04 上构建 thrift 0.9.1 时出错

    在 Ubuntu 13 04 上构建 thrift 0 9 1 支持 C C java C perl python 时出现此错误 configure 不带任何选项运行 make 不带任何选项运行 Making all in test mak
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • 为什么 C# 中同一类型的隐式和显式运算符不能共存? [复制]

    这个问题在这里已经有答案了 为什么同一类中两个相同类型的运算符 显式和隐式 不能共存 假设我有以下内容 public class Fahrenheit public float Degrees get set public Fahrenhe
  • 类中是否可以有虚拟类声明?

    我正在为个人项目中框架的各个组件设置一个接口 我突然想到了一些我认为可能对接口有用的东西 我的问题是这是否可能 class a public virtual class test 0 class b public a public clas
  • 从时间列表中查找最接近的时间

    所以 这是场景 我有一个带有创建时间的文件 我想从该文件的创建时间最接近或相等的时间列表中选择一个时间 完成此操作的最佳方法是什么 var closestTime listOfTimes OrderBy t gt Math Abs t fi
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • 将 2 个字节转换为整数

    我收到一个 2 个字节的端口号 最低有效字节在前 我想将其转换为整数 以便我可以使用它 我做了这个 char buf 2 Where the received bytes are char port 2 port 0 buf 1 port
  • 如何对STL向量进行排序?

    我想排序一个vector vector
  • WPF DataGrid - 在每行末尾添加按钮

    我想在数据网格的每一行的末尾添加一个按钮 我找到了以下 xaml 但它将按钮添加到开头 有人知道如何在所有数据绑定列之后添加它吗 这会将按钮添加到开头而不是末尾
  • 在 Qt 中播放通知(频率 x)声音 - 最简单的方法?

    Qt 5 1 或更高版本 我需要播放频率为 x 的通知声音 n 毫秒 如果我能像这样组合音调那就太好了 1000Hz 持续 2 秒 然后 3000Hz 持续 1 秒 最简单的方法是使用文件 WAV MP3 例如如此处所述 如何用Qt播放声音
  • 如何调用与现有方法同名的扩展方法? [复制]

    这个问题在这里已经有答案了 我有这样的代码 public class TestA public string ColA get set public string ColB get set public string ColC get se
  • 初始化列表在 VC10 中不起作用

    我在 VC 2010 中编写了这个程序 class class1 public class1 initializer list
  • 如何知道 HTTP 请求标头值是否存在

    我确信这很简单 但是却让我感到厌烦 我在 Web 应用程序中使用了一个组件 它在 Web 请求期间通过添加标头 XYZComponent true 来标识自身 我遇到的问题是 如何在视图中检查此组件 以下内容不起作用 if Request
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它

随机推荐