【问题标题】:Java to C# Learning/Clarity [closed]Java 到 C# 学习/清晰 [关闭]
【发布时间】:2014-05-07 17:01:49
【问题描述】:

所以我周一早上开始学习 C#,过去两天我一直在看一个又一个视频,现在我有一些观察,我想知道我是否正确地思考。

我过去大约有 4 年的大学水平 Java 编程经验,所以如果需要任何解释并将其引用到 Java 项目是相关的,请随时建立一个心态链接。

我也开始了我的第一个“真正的”应用程序开发实习,所以他们让我在开始从事基于 C# 和 .Net 的项目之前的第一周自己学习东西。

任何将不胜感激!

  1. “as”运算符:据我了解,这基本上是一个演员表。所以我可以说

    int a;
    double b;
    a as b;
    

    这应该等同于 (double)a,对吗?

    或

    object sender;
    Label clickedLabel = sender as Label.
    

    这将类似于(标签)发件人,发件人是一个对象,但现在被转换为标签,对吗?

  2. 动态类型:我对这个的理解,就是它是一个“万物皆可”!类型,表示动态d;可以用作 int、double、object、string 等。它可以应用于任何东西。是/否/种类?

    dynamic d =5;
    int a = d;
    string b = d;
    object c = d;
    
  3. 如果正确,这与拳击有什么不同?装箱是否只是“as”运算符/动态类型,但只能与 Object 类型一起使用?

  4. 整数字面量,它们的使用频率如何?在什么场景下使用?我看了他们的一段,他们觉得很奇怪。我将进行应用程序开发,所以如果这些有用,请解释它们的一些日常用途

    212 = decimal
    215 = decimal unsigned
    0xFccL = long hexidecimal (i think)
    058 = Illegal as 8 is not an octal digit
    05UU = Illegal as a suffix (the u for unsigned) is repeated
    30u1 = unsigned long
    30u = unsigned int
    

    我只是对这些都用于应用程序开发类型的地方感到困惑。在我看来,他们更像是直接组装交互,但也许这是应用程序开发工作的常见部分(第一次“真正的”实习)

  5. {#} 语法/WriteLine:所以我制作了一些演示应用程序,它们使用的语法类似于..

    Console.WriteLine("Radius: {0}, Area: {1}", r, areaCircle);
    

    或

    Console.WriteLine("{0}:{1}:{2}", e.Hour.ToString(), e.Minute.ToString(), e.Second.ToString());
    

    据我所知,{0}、{1}、{2} 等...以某种方式将值从集合中提取出来(我认为这不是我实际创建的)。 我不确定这被“称为”什么,所以我不知道如何用谷歌搜索它。

    在我发现这是一个非常有用的操作时,是否有人介意为我指出正确的方向。

  6. Nullable Types:从我在这里学到的是这样的表达式

    static int? d;
    if (d.HasValue) 
    {
    // something
    }
    

    不会抛出任何错误,因为这将是一个有效的交互,而在 Java 中这会导致某种编译错误。

    我相信你也可以设置一个可以为空的类型,并以实例化开头,例如:

     int? d = 5;
    

    这将与上面相同,但作为标记为它的空属性。

    我的问题是,

    • “Nullable”可以应用于所有类型还是仅应用于某些类型?

    • 你能得到一个 d 的实际值,但仍然让检查返回 null 吗?由于您可以将 null 属性标记为类型,因此我猜测“null”的属性和“value”本身是相互独立地处理/检查的。这是正确还是错误的猜测? (如果需要,我可以尝试更好地解释)

  7. 字符串问题!

    • 我们在 C# 中使用字符串是否像在 Java 中使用字符串一样? (大写)

    • 使用子字符串时,为什么这两个字符串返回不同的答案?

      string sub = input.Substring(0, 3); //returns index 0-2
      
      string sub = input.Substring(3, 3); //returns index 3-6
      
  8. 可能会添加更多...

    希望这不是要求太多,我只是想确保我在接下来的几天里尽可能地学习 C#。

    如果你们中的任何人都知道一些关于 C# 的优秀文章/教程/等关于新应用程序开发人员应该知道的内容,请指出我的方向。我也有一个 PluralSight 帐户,因此您也可以将我引导至他们的教程。

    谢谢,

    -奥斯汀

【问题讨论】:

  • 你有没有接触过任何书或只是看了一些视频?这些(以及更多)问题都包含在面向学习者的书籍中(例如 Troelsen 的书)。
  • 您有很多问题,但这样的方式效果不佳。您应该分别提出每个问题,这样投票和接受答案就会按照预期的方式进行。
  • 另外,你的一些“这应该有效,对吧?”样本实际上不会编译。在这里询问之前,您应该先尝试看看代码是否按您期望的方式工作。
  • 听起来你应该去弄脏你的手
  • 到目前为止,我已经观看了将近 16 个多小时的教程系列,遗憾的是我没有机会阅读一本书。 ://

标签: c# nullable boxing dynamic-cast as-operator


【解决方案1】:

我会在回答中使用你的数字:

  1. 不,这不等效。如果转换失败(例如,如果您尝试将Label 转换为int),使用“显式”或“C 样式”转换将引发无效转换异常。如果转换失败,使用 as 运算符将返回 null,这就是为什么不能将它与值类型一起使用。

  2. dynamic 表示它是运行时确定的类型,应谨慎使用。 C# 旨在进行强类型化。违反此规定后果自负。

  3. “拳击”是一种完全不同的动物,它围绕着将值类型转换为引用类型。见Boxing and Unboxing。

  4. 始终使用整数文字。假设你想要 FF 十六进制,你写 0xFF。你当然可以写255,但是用字面意思更清楚。

  5. 这是隐式调用String.Format,一个非常强大的函数。请参阅MSDN 了解更多信息。

  6. Nullable 仅适用于 value 类型(引用类型始终可以为 null)。它并不是真正的“标签”,它只是意味着可以将 null 值分配给变量。请参阅is int? a value-type or a reference-type 了解更多信息。

  7. String 和 string 完全一样。您的编码风格决定了您使用的风格。要回答第二个项目符号,因为这就是定义重载工作的方式。见String.Substring

  8. 请将未来的问题作为单独的 SO 问题提出。通常不鼓励这样的多方参与。

最后,还有很多很棒的 C# 资源! MSDN 应该是一个起点,他们有一些非常好的文档。例如,“Boxing C#”在 Google 上的热门搜索指向链接的文章。

【讨论】:

  • “它有效地将值类型转换为引用类型。”不,它没有。在复制/分配/传递它们时,可空值类型的行为与引用类型非常不同。
  • 非常感谢!从现在开始,我将制作单个问题的帖子。对不起!
  • @svick,该声明具有误导性,对此我深表歉意。我改为链接了一个适当的 SO 问题。
猜你喜欢
  • 2012-01-31
  • 2010-09-15
  • 2014-03-15
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
相关资源
最近更新 更多