C#与DELPHI问题,初学c#开发WINFORM的疑惑:
1.C#没有DBTEXT类的组件,难道得再取一次数据显示在编辑框上,还是怎么回事?2.Delphi中可以用Unit新建一个公共单元储存全局变量和函数,c#中在哪里创建?让各窗体都可以访问此变量的值?3.DELPHI可以不用写SQL语句代码实现增删除改,C#增删改都得手动写SQL语句手动执行?4.那在Winform数据库开发方面c#较DELPHI的优势到底在哪呢?

解决方案 »

  1.   

    (1)你是说让TextBox绑定数据库?这个C#支持。
    (2)C#可以创建一个静态类,在里面定义:
    public static class GlobalData
    {
        public static string ShareStringVar = "";
    }
    (3)ADO.NET数据控件支持自动产生SQL。
    (4)这是一个仁者见仁的问题。取决于你对问题1、2、3的理解。虽然C#可以实现1、2、3,但是这些都是非常不推荐的设计方法,说明如下:
    对于1,绑定是一个非常不好的习惯,一旦数据库结构发生修改,用户界面也要修改,而且和数据库绑定的程序,你将失去将窗体和代码“抽取出来”,并且在另一个项目中重用的可能。
    对于2,同样的原因,如果程序依赖公共变量传值,那么程序也变得难以修改,当你想移植程序代码的时候,你不能简单将窗体代码拷贝出去就能用,还得满世界寻找是否用了什么全局变量。因为任何窗口都可以修改这些变量,当程序出现问题,你也很难说出是哪些代码出现了问题。
    对于3,众所周知,那种所谓“不写sql”的东西功能相当有限,实际上开发中根本用不了。不写sql的另一个办法是使用语言内置的查询(LINQ)和ORM框架。结合以上,我想说,C#可能没有什么优势,在你看来。因为C#是为程序员而设计的,目的是开发那些复杂的,灵活的,具有弹性的应用程序。而你的所有需求都是一个用户希望快速搭建程序的需求,在这方面,C#提供了和Delphi类似的支持(毕竟一个人搞的),但是谈不上改进,这不是微软这10年的重点。但是,你可能没有听说,微软有一个叫visual studio lightswitch的面向业余用户的产品,它的设计思想就和你说的类似,目的是让不会编写程序的人也能开发简单的程序。它只需要配置用户界面、报表和数据库等等就可以得到一个程序,使用visual studio lightswitch比Delphi应该更加简单。
      

  2.   

    1.C#没有DBTEXT类的组件,难道得再取一次数据显示在编辑框上,还是怎么回事?
    3.DELPHI可以不用写SQL语句代码实现增删除改,C#增删改都得手动写SQL语句手动执行?按楼上所说,现在我所看见的所有的DELPHI数据库程序,都是以绑定的方式和自动生成SQL语句为主的呀?存在应该有它的合理性,按1楼的说法那不是基本上所有DELPHI开发的数据库程序都是不规范的?烦请高手指点下!
      

  3.   

    Delphi和VCL的出现,很大程度上是适应当时RAD(Rapid Application Development)的需要。由于VCL框架和较丰富的控件支持,所以Delphi的数据库应用开发速度曾给人带来许多惊喜。但在另一方面,Delphi中的大量动态绑定技术,也导致了业务逻辑与界面逻辑混杂,组件间的高耦合。当然,合理的系统设计,仍然可以尽量避免高耦合、低内聚问题的出现。
      

  4.   

    因为C#是为程序员而设计的。caozhy这话我就不怎么同意了,难道DELPHI不是为程序员而设计的?用DELPHI的不是程序员?我只是想说对于1.3来说,开发速度不是慢了很多?我并没有说我不会写SQL语句增删改,很多简单的单表更新也写SQL语句的话,那不是变得繁琐了很多?我并没有说c#不好,而且我说了我正在学,只是看到这里C#和DELPHI有比较大的不同,所以想了解下c#的设计模式,而且c#与DELPHI是有很多相似之处的,比如控件、属性,很多控件只是变了个名称而已
      

  5.   

    用delphi的不都是程序员。也包括了很多专业用户性质的。依靠数据绑定来提高开发效率,或者把开发效率和编写代码多少等效起来的,这种观点在现在看来相当初级。我不否认Delphi设计一些为非程序员而提供的傻瓜化搭建程序的功能有什么不妥。但是随着时代的进步,编程工具出现了为不同用户细分的差异化的产品,一个专门为那些需要定制软件需求的专业用户的产品,比往一个面向专业的开发工具中糅合这些东西是更好的选择。这就好比最初是没有傻瓜相机的,但是随着照相技术的需求,大量的非摄影专家的人也有拍摄需求,于是有了傻瓜相机,我没有贬低傻瓜相机和用傻瓜相机的人的意思。但是你拿专业单反相机和傻瓜相机比较,说哪一个有优势是没有意义的。
    事实上,你没有去了解visual studio lightswitch,这个产品将快速原型开发,无需编码的特性发挥到了极致,就你说的1、2、3点来说,如果你用过visual studio lightswitch,你会发现它更有优势。
      

  6.   

    不用写代码的话,程序功能就会变得比较死,实现预定功能应该会受很大程度限制,就如动态从数据库创建菜单来说,不写代码应该较难实现的,visual studio lightswitch确实没用过,不知道是否这样。关于第2个问题,我想请教下:当用户登陆成功的时候,我用DELPHI的UNIT记录用户的身份信息,当显示某个模块时,需要根据些用户的ID或者权限值来判断增删改功能是否有权限和菜单是否能够显示等。在ASP.NET开发WEB程序中有SESSION和COOKIES来保存用户的身份信息,其中SESSION和COOKIES任何窗口也可以修改这些值,那不是也破坏程序移植性么?不知道C#怎么处理WINFORM的,WINFROM如果没有记录的话,在主程序模块和其它模块中怎么知道当前是哪个用户呢?烦请再指点下
      

  7.   

    看了LZ上面的提问,不论delphi还是c#或任何一种语言,字里行间看出LZ还没到问这类问题的时候。quote---
    关于第2个问题,我想请教下:当用户登陆成功的时候,我用DELPHI的UNIT记录用户的身份信息,当显示某个模块时,需要根据些用户的ID或者权限值来判断增删改功能是否有权限和菜单是否能够显示等。
    quote----
    既然用到数据库,用户权限这些自然是保存在数据库中,LZ之前是怎么做的?有点后怕的感觉。quote---
    2.Delphi中可以用Unit新建一个公共单元储存全局变量和函数,c#中在哪里创建?让各窗体都可以访问此变量的值?
    quote---
    各窗体或控件间的通讯方式多种多样,delphi或c#和其他语言间实现的方式都是大同小异的。session、cookies 这些不是某种语言的内容,是各种语言对其这种技术的实现。
    问的所谓“记录”无非就是通讯问题,文件(序列化)、管道、共享断、数据库等等等不都能吗。各语言间没有太多的差异,delphi、.net、java 这些不过都是商品,要比较delphi和.net的优势的话...delphi编译出的是原生程序,要比.net这种虚拟机机制的托管代码的执行效率快,
    而且delphi xe3已实现了有限的跨平台,.net和java都是出生时就“号称跨平台”了,
    delphi有大量成熟的第三方组件。
    开发效率上跟.net没有太多区别,但是作为一个商品,.net是M$的,delphi是XXX的,各自得到的市场支持和推广的差距不言而喻。建议LZ如果不是为生活所迫而开始学.net的话,还是继续好好学已有基础的delphi吧,至少把oop学好。