【问题标题】:C# Random 'new' KeywordC# 随机“新”关键字
【发布时间】:2017-08-10 14:20:38
【问题描述】:

我大约一年前开始涉足 Lua,并在最近发现 Unity 时决定学习 C#!

这一切都非常令人兴奋,但由于对 Lua 的理解极其有限,我真的很难理解这个概念:

// C# Random Number:    
Random r = new Random();
r.Next(5, 10)

据我所知,在 Lua 中我会简单地这样做:

-- Lua Random Number:
r =  math.random(5, 10)

我的问题是:

  1. 在 C# 中,为什么我必须创建这个 Random 类的实例?为什么我不能使用与上面 Lua 示例类似的语法从 Random.Next(5, 10) 方法中获取一个随机值并将其分配给 'r'? (我问这个是因为我不必创建 Console 类的新实例来调用 WriteLine 方法......这就是我在这一点上感到困惑的原因)。

  2. 我注意到控制台的 IDE 自动完成显示:'public static class',而对于 Random,它显示:'public class'。如果 Console 是“静态”的,这就是我们不需要创建“新”实例的原因吗?

我已阅读此内容:https://www.dotnetperls.com/static,但我缺少一些基本的拼图,所以仍然不完全理解这个概念。

我正在寻求帮助来理解这个概念,所以请用一些例子来回答问题(就像我是一个完全的初学者一样)。

【问题讨论】:

  • 因为Random不是静态类,所以Console是静态类。至于学习,我总是建议使用 Pluralsight,因为它做得很好。您可以通过 Microsoft 的 Dev Essentials 获得免费订阅。
  • 听起来你基本上需要找到一本好的C#书。不要只是试图从网上的点点滴滴中学习——买一本好书。 Essential C# 或 C# in a Nutshell 将是很好的起点。
  • 拥有实例 Random 的原因是,顺便说一下,您可以创建具有不同种子甚至实现的随机数生成器并传递它们。
  • 我认为这可能是由于“静态”类。我离推理还差那么远,但它仍然没有澄清我脑海中的概念! :D

标签: c# lua


【解决方案1】:

这是由于 Random 类的工作方式造成的。

一个类不是静态的原因之一是它可以有多个具有不同状态的实例。

Random 使用种子生成伪随机数。如果您使用相同的种子,将生成相同的数字。每个Random 实例都有一个种子作为状态。如果Random 是静态类,则只能使用一个种子,因为您无法创建具有不同种子的实例。当您使用无参数构造函数创建Random 对象时,系统时间用作种子。

Random 作为非静态类允许客户端代码传入他们想要使用的种子,从而使 API 更加有用。

我注意到控制台的 IDE 自动完成显示:'public static class',而对于 Random,它显示:'public class'。如果 Console 是“静态”的,那是我们不需要创建“新”实例的原因吗?

不,您无需创建 Console 的新实例即可使用其方法。事实上,你甚至连new Console() 都做不到!这是因为没有也不应该有多个控制台。计算机中只有一个控制台。它不需要维护多个状态,例如带有种子和东西的 Random 类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-27
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多