【问题标题】:Help with understanding C# code and porting to Objective-C帮助理解 C# 代码并移植到 Objective-C
【发布时间】:2010-11-10 08:12:30
【问题描述】:

好的,我有这个由其他人用 C# 编写的原型,我正在尝试将它放入 Objective-C。现在,我还没有任何正式的 C# 经验,所以我还不了解它的一切。我了解前三个变量是什么,但我遇到了第四行和第五行(c_data)正在做什么的问题。第四个是声明一个方法,然后是第五个定义它还是发生了什么?感谢您的帮助!

public class c_data {
    public double value;
    public int label;
    public int ID;
    public c_data() { }
    public c_data(double val) {
        value = val;
    }
}

【问题讨论】:

  • 那是一些看起来很悲伤的 C# 代码。我希望你在转换它时在命名和格式方面做得更好。
  • 你在告诉我。我有一吨这样的代码,我必须在一周内转换。安睡的夜晚已经一去不复返了,通宵达旦的人来了!
  • 我同意,这可能是教科书中的一个例子。这就是为什么这么多编程书籍很糟糕的原因。如果你不会用真实代码来做,那就不要教别人如何用假代码来做,因为在 5 年内你会有一堆看起来像你的例子的代码......我在和你说话Microsoft 和 myStupidPrefix。

标签: c# objective-c methods declaration porting


【解决方案1】:

如果可以的话,这更像是在一个 Objective-C 类中同时拥有以下两种方法:

  • (id)init;
  • (id)initWithNumber:(NSNumber *)number;

构造函数和初始化器是类似的,只是看起来有点不同。

【讨论】:

    【解决方案2】:

    第四行和第五行是 C# 中的构造函数。它们等同于 Objective-c 中的 [[c_data alloc] init] 链。 C# 允许您根据构造函数采用的参数重载它们。这相当于在 Objective-C 中有两种不同的初始化方法:

    @interface CData : NSObject
    {
       double value;
       int label;
       int ID;
    }
    
    @property double value;
    @property int label;
    @property int ID;
    
    -(id) init;
    -(id) initWithValue:(double)value;
    
    @end
    

    【讨论】:

    • 非常感谢...如果不是你,我会在这个问题上再摸索一个小时。
    • (将 init 返回类型更改为“id”并声明扩展 NSObject。)
    • 很好的答案,尤其是从 Objective-C 移植的角度来看。移植时遵守目标语言的命名约定也是一个好主意(例如,“CData”而不是“c_data”作为类名)。
    • 当然,C# 代码从不遵守源语言的约定(它远远超出了命名)。 :(
    • 谢谢。我最初排除了其中一些约定,以便更容易突出基本的移植差异。但值得有一个干净的版本来突出显示。我会提到,在某些情况下,如果它允许您避免进行全局重命名或重构,那么移植违反约定的代码会更容易。我不知道这是否适用于这种情况 - 但我怀疑 OP 可以更好地做出决定。
    【解决方案3】:

    第一个 c_data 是一个默认的无参数构造函数,它将结构的字段初始化为默认值(值 -> 0.0,标签 -> 0,ID -> 0),第二个 c_data 是一个设置值字段的构造函数传入参数val 的实例和其他字段的默认值。我所描述的是这两个构造函数调用如何初始化实例。

    【讨论】:

      【解决方案4】:

      第 4 行和第 5 行都是构造函数。

      第 4 行是“默认”构造函数,在这种情况下不会初始化任何变量。

      第5行的构造函数将名为value的变量设置为传入的参数。

      【讨论】:

        【解决方案5】:

        第四个是为类定义一个没有参数且没有动作的构造函数,第五个是为类定义一个构造函数,它接受一个双精度值作为参数并将类内部成员变量的值设置为传递的值 val。

        【讨论】:

          【解决方案6】:

          第 4 和第 5 是构造函数,用于在您新建一个时初始化 c_data 的实例。

          【讨论】:

            【解决方案7】:

            第4行是无参构造函数,第5行是有参构造函数。

            【讨论】:

              猜你喜欢
              • 2011-12-17
              • 1970-01-01
              • 1970-01-01
              • 2011-02-21
              • 1970-01-01
              • 2014-09-23
              • 1970-01-01
              • 2011-05-17
              • 1970-01-01
              相关资源
              最近更新 更多