C# Ansi C用C编程还是用C编程?

C# Ansi C用C编程还是用C编程?,c#,c,oop,ansi-c,C#,C,Oop,Ansi C,大家好,我最近开始使用C和unity进行游戏开发,事情进展得很顺利。我遇到的问题不在于代码的功能,而在于编码的风格。高中的时候我学了4年ANSI C,所以现在当我跳到C的时候,我真的不能用预先准备好的课程,除了我在C中使用的那些叫做库的课程。在这一点上,我的代码看起来非常类似于C,在实现OOP原则方面做了一些努力。我担心如果另一个C开发人员看了这段代码,他们会说这段代码草率且不可读。我的C代码并不是你所看到的最优雅的代码。我一直是一只孤零零的狼,努力自学,希望成为一名独立开发者。所以我没有团队作

大家好,我最近开始使用C和unity进行游戏开发,事情进展得很顺利。我遇到的问题不在于代码的功能,而在于编码的风格。高中的时候我学了4年ANSI C,所以现在当我跳到C的时候,我真的不能用预先准备好的课程,除了我在C中使用的那些叫做库的课程。在这一点上,我的代码看起来非常类似于C,在实现OOP原则方面做了一些努力。我担心如果另一个C开发人员看了这段代码,他们会说这段代码草率且不可读。我的C代码并不是你所看到的最优雅的代码。我一直是一只孤零零的狼,努力自学,希望成为一名独立开发者。所以我没有团队作业的经验。下面是我的应用程序中的一个方法示例:

    public void create_item(string item_name,char L_M_H,int item_cat)//function not finshed july 13th 2013 8:07pm other fuel items need to be finished. due july 14th 10:00pm
    {
        int i = 0;
        if(item_cat == FUEL)
        {
            print("item_cat is fuel");
            if(L_M_H == L)
            {
                for(i = 0;i < 5;i++)
                {//increments if fuel index has a value
                    if(l_fuel[i] != null)
                        continue;
                    if(l_fuel[i] == null)
                    {
                        l_fuel[i] = item_name;
                        Debug.Log (string.Format("Low Class Fuel: {0} Created",l_fuel[i]));
                        break;
                    }
                }
            }
            if(L_M_H == M)
            {
                for(i = 0; i < 5; i++)
                {
                    if(m_fuel[i] != null)
                    {
                        continue;
                    }
                    if(m_fuel[i] == null)
                    {
                        m_fuel[i] = item_name;

                    }
                }
            }
        }

    }

我确信在C中有更好的方法来执行这样的函数,但是停止开发使用类和C特定类型(如List)来执行这些任务是否值得?我非常有兴趣从经验丰富的程序员那里获得意见,因为我在C和OOP方面完全是个呆子。

是的,你的代码太草率,不可读

1-尊重下列原则:

您的方法和成员名称应为ProperCased,因此它是public void CreateItem

2-不要在原语类型不属于的地方使用它们

这两个参数charl_M_H和int item_cat在这里似乎都是用来仿真的

3-正如其他人在评论中提到的,你的m_燃料和l_燃料看起来很奇怪。确保您创建了适当的数据模型来表示您的数据

4-不要使用for来迭代集合。使用foreach或LINQ


这就是如果代码更加面向对象,那么代码的外观。这个例子很荒谬。我想您实际上只有一个逻辑燃料阵列,但可能由于其他地方的一些不正确设计或一些预优化,您的代码中不得不有两个。

我想,int item_cat/fuel,L_H/L/M应该是。另外,我也不确定m_燃料和l_燃料到底是怎么回事。编辑:另外,一般来说,集合中很少有空条目。但我不确定这里的上下文是什么,所以我不能评论是否应该改变。总的来说,是的,可以选择一些关于C OOP的书籍或在线教程。从小处做起。net中的类并不是为了让我们的程序员工作更困难。他们在那里是为了让事情变得更容易。通过理解并在适当的地方使用它们,你会帮你自己一个忙。在大多数情况下,它们都经过深思熟虑的实施和良好的测试。所有的负面评级是怎么回事。我清楚地说,我不是很有经验,我只是想得到一些我确实接受和欣赏的建议。如果不问会更好吗?谢谢你的帮助,如果这个问题不符合你们中一些经验丰富的开发人员的要求,我会反对你的第4条,因为他正在更改索引中的项目。Foreach和LINQ不应该对它所迭代的集合产生副作用,它们可以以直接赋值以外的任何方式进行,但除了最明显的情况外,这在所有情况下都是不受欢迎的。@Tory是的,但很可能是因为数据模型不好。谢谢你的建议,但是我在OOP方面仍然有问题。是什么使它比过程编码更好呢?同样的原因使C比汇编更好。主要是因为OOP是模块化的,而不是过程化的。与缩短CPU周期相比,对稳定、可维护和可扩展的应用程序更感兴趣的业务客户更喜欢OOP。
public interface IFuelUpdater {
    void UpdateFuelItemContainerSlots(string[] container, string itemName);
}

public class MediumOrLowFuelUpdater : IFuelUpdater {

    public void UpdateFuelItemContainerSlots(string[] container, string itemName){
        for(i = 0; i < container.Length; i++)
            {
                if(container[i] == null)
                {
                    container[i] = item_name;
                }
            }
    }
}

   // elsewhere

   IFuelUpdater updater = new MediumOrLowFuelUpdater();
   string[] mediumContainer = new string[6];
   string[] lowContainer = new string[6];

   updater.UpdateFuelItemSlots(mediumContainer, "*Name Goes Here*");
   updater.UpdateFuelItemSlots(lowContainer, "*Low Name Goes Here*");