为第一次接触编程的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呢?

这里补充一下,属性有一个快速的方法实现,那就是在属性体里面只写get好set即可,如:
public string name{ get;set;}

C#为什么会有get和set的呢,设计者的目的就是让属性有别于成员变量,成员变量一旦设置为公用变量,那么可以随意改变。但有了get和set配合的属性,则可以在get和set中设置访问的条件了。如

private string _name;
            public string name
            {
                get 
                {
                if(mark>0)
                   return _name;
                 }
                set 
                 {
                     if(mark==0)
                        _name = value;     
                 }         
            }

这样,就可以从类的属性中来控制外部的读写权限和条件,这样的类就相对简单的类成员变量更安全。当然,在别的语言中,为了达到这个目的,使用的方法时成员变量加一个对应的方法来实现的。我们这里也可以把这个属性看做是实现对某些有约束条件才能访问的变量的对应的方法。

如果我们在属性定义中只定义get那么,这个属性就是只读的,反之,如果只有set那么就是只写属性。

这点很多初学者看到的书就没有讲到这一层,我觉得多数是因为写书的人在人云亦云或根本就没有打算把这些基础的东西讲穿讲透。所以这里说明一下。

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

还是上面那个例子,我来叙述一次,看看效果如何?
一、 类
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)
        {
            //实例化一个类,或叫落实一个实例(和把事情落实到一个人身上一样),这里指定一个叫fc的实例来做事情了
            myfirstlclass fc = new myfirstlclass();
            //显示为空,因为我们在类里没有给_name赋过值,真正装值的是它!
            MessageBox.Show(fc.name);
            //通过呼叫name输入了一个值,表面是给了name,其实是给了_name,这点我想大家应该清楚了
            fc.name =textBox1.Text;
            //将name的值赋值给lable2,实际调用了类属性中额get
            label2.Text = fc.name;
            ///这次就会显示”河西石头”了,因为我们已经通过mfc.name输入给_name值了,当再次呼叫时,_name就会把它的值return给name显示在外界;  
            MessageBox.Show(fc.name);
            
        }

运行效果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河西石头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值