为第一次接触编程的C#初学者释义

说起来C#也算是比较老的一种语言了,第一次接触是在2001年,市面上有许许多多以“入门”为标题的书,结果几乎都以把自己搞糊涂了结束,实际上那些书所在教授知识的时候把所有的学习者都看得基础过高了。
最近有学生开始学习C#,很不巧他们也遇到了一些我当年刚刚学习C#时的疑惑。
比如说在将类的时候,仅仅给出的一个简单的类的定义的例子就足以把那些零起点或几乎零起点的人给搞晕甚至吓跑!换句话说,也就是没有从中国人的思维角度来把知识点讲穿讲透,致使学习者似懂非懂,下面我们来看看一般书所将的类和属性和方法:
类:
class testclass{
………….
}
属性:

private string _name;
        public string name
        {
            get 
            {
               return _name;
             }
            set 
             {
                    _name = value;     
             }


        
        }

方法:

 public void sayHello()
    {
        MessageBox.Show("hello wold!");       
    }

当初学的时候文字上是认识,却有许多的问号在脑子里永远挥之不去。比如:
为什么写的时候是先写get{}后写set{}?为什么return的不是name而是_name?
定义了一个_name还要定义name做什么呢?
还有为何set{}中的_name会等于value呢?
我是从VB转过来的,没有基础,很久都没有理解,后面也似懂非懂的在这么学着用,甚至复杂的类和复杂的方法都可以定义出来了,但还是不知道为何要这么定义,格式为何要这样,开发这个语言的工程师难道他们的脑子就这样吗,非得搞得学这个语言的学习者都迷迷糊糊的?
对于这点我始终持怀疑态度,我觉得多数是因为写书的人在人云亦云或根本就没有打算把这些基础的东西讲穿讲透。

如果写书的人能够从学习者的角度帮学习者多问几个为什么的话,如果能够把这些东西讲穿讲透,我想书也就好读多了,我们的学习的进度也就快多了,学习的信心也就大多了。

还是上面那个例子,我来叙述一次,看看效果如何?
一、 类
a) 类是什么?
俗话说,物以类居,那么说,类(class)就是对物(object)的一定划分,就看你用什么标准来划分了;
类,造字的时候据说是相似的之意,古文中仍保留着这个意思,如“类似”,也就是说:类就是相似之物;
在C#中,类其实就是对具有相类似的实例对象的共同性质的归纳。
这里有一点要引起足够的注意,那就是既然类是一种归纳,那他就再也不是实例对象了。
比如说人是类,人类,如果有人问,你今天和谁一起吃饭,你会说和某一个人。如果你回答是“和人吃饭”,别人一定觉得不是你白痴就是你当他是白痴!
b) 如何定义类?
第一定义框架,第二定义属性,第三第一方法(第二第三没有可有可无可先可后)。
c) 如何使用类?
因为类有明显的类似属性特征能力特征,定义之后便于统一管理和调配。就好比我们把办公室里的人分为“程序员”类、“美工”,这样我们就可以安排程序员去写程序,美工去做界面等,这样就可以各自扬长避短。
d) 为什么要定义类?
一般我们采用逐级呼叫的方法来使用。如何逐级呼叫呢?如果你们公司接到一个网络方面的case,那么首先是分给“开发部”,开发部下面的“网络开发组”,然后由网络开发组的某一个同志来完成任务。(其实我们这样逐级落实的过程就是我们后面要讲到的类的实例化,也就是类的具体使用了,换句好懂的话就是类的落实化。不落实到具体的哪个类的人来做,天知道最后谁来完成任务啊!)

下面是定义类的一个例子:
只有框架的类:
class myfirstlclass
{
………………
}
这个其实就是个框架,以class关键字开始后面写类名(myfirstclass),表示定义的是类如果你只是定义一个只有框架的类理论上可以,当实际是没有用处的!
带有属性的类:

class myfirstlclass
{
        private string _name;///这里定义的_name其实仅仅是个容器,用来储存值的,下面的name只是个能被外界看到和调用的一个接口,它其实是不能储存值的。
        public string name  ///这里的name只是一个能被外界调用和看到的接口或说管道,外界调用或输入的值都通过它来输送,上面的_name才是藏在这个类里面的储存容器;
        {
            get 
            {
               return _name;    ///当外界调用这个类的name时,通过这里的retrun把_name的值传给name以供外界调用,也就是说,如果这里的return是其他的话,外界呼叫name时就会是其他的某个值, 如果没有return 的话,那外界调用name时,就得不到任何值;
             }
            set 
             {
                 _name = value;     ///当外界赋值给这个类的name时,其实就给了Value,而这个值通过_name=value这个语句就把值储存在_name里了;
             }
        
        }

}

相信通过上面的详细讲解大家都明白了,类中属性的定义和属性的工作原理了;
我们马上做个实验,看看是否如此,我们调用一下这个类:
我们在一个form中添加一个按钮,双击,进入button_click(){}内,我们添加代码,开始调用,完整代码如下:

   private void button1_Click(object sender, EventArgs e)
            {
                 myfirstclass fc=new myfirstclass();//实例化一个类,或叫落实一个实例(和把事情落实到一个人身上一样),这里指定一个叫fc的实例来做事情了
                 MessageBox.Show(fc.name);///显示为空,因为我们在类里没有给_name赋过值,真正装值的是它!
               fc.name=”河西石头”;      ///通过呼叫name输入了一个值,表面是给了name,其实是给了_name,这点我想大家应该清楚了
     MessageBox.Show(fc.name);  ///这次就会显示”河西石头”了,因为我们已经通过mfc.name输入给_name值了,当再次呼叫时,_name就会把它的值return给name显示在外界;
    }

猜你喜欢

转载自blog.csdn.net/haigear/article/details/84560079