http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 11354|回复: 7

[C#入门] C#-类和对象1:定义类

[复制链接]
发表于 2014-7-9 06:19:00 | 显示全部楼层 |阅读模式
本帖最后由 wwwconsumer 于 2015-6-3 05:49 编辑

面向对象的编程思想主要涉及类、封装、接口和对象,下面我们来和这些抽象的概念接触吧。
世界上万事万物,虽然复杂,但也可以归门别类进行划分,类就是用数据表示事物的属性,用函数表示事物的行为,数据和行为就构成了一个统一的整体。例如,我们注册了苏菲论坛的会员后,这个会员就有了注册名、年龄、性别等属性,当然也可以有人与人打招呼、写文章、获得奖励这些行为。只要你把这些属性和行为定义为苏菲论坛的一个类中,你就可以为这个类中任何一个对象确定其注册名、年龄、性别属性(实际上就代表了具体的帅哥和美眉),你也可以让他(她)完成了打招呼、写文章、获得奖励等行为。怎么样,编程不难吧。下面我为苏菲论坛的会员写个类吧.
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SufeiClass
{
    class Sufei
    {
        //变量成员 
        public string name;
        public int age;
        public int Age
        {
            get
            {
                return age;
            }
            set
            {
                if (value <= 0)
                    age = 0;
                else
                    age = value;
            }
        }
    
            private int count = 0; //用来记录积分

            //函数成员
            //函数:登陆
            private void Hello()
            {
                Console.Write("嗨,我是{0},我今年{1}岁了。", name,age);
            }

            //函数:写文章
            public void WriteAticle()
            {
                Hello();
                Console.WriteLine("你的帖子已经被录入精华,谢谢发言");
            }

            //函数:奖励积分
            public void JiangLi()
            {
                count++;
                Hello();
                Console.WriteLine("我已经积攒{0}积分!", count);
            }
        }
    }


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-7-9 08:08:04 | 显示全部楼层
你们有没有学到方法注释和命名规则,我是建议是方法以Xml注释为主,名称以骆驼命名为主,,
 楼主| 发表于 2014-7-10 03:43:40 | 显示全部楼层
.Net推荐变量用camelCase(驼峰式)命名,以PascalCasing形式为函数命名,即所有单词的首字母大写。但你所说的以XML注释为主是指什么,我不太明白,请指教!
 楼主| 发表于 2014-7-12 05:30:34 | 显示全部楼层
本帖最后由 wwwconsumer 于 2014-7-12 05:34 编辑

要使用类,必须首先申明一个该类的对象,通过对象执行类的行为。苏菲论坛成员只是一个是抽象的概念(类),它有年龄、性别、写文章的属性,但只有具体的对象wwwconsumer才能赋予其具体的属性和发出打招呼、写文章、获得奖励的动作。在编辑窗口中单击Program.cs标签,向主函数中输入下面的代码。
[C#] 纯文本查看 复制代码
 class Program
    {
        static void Main(string[] args)
        {
            //申明对象wwwconsumer
            Sufei wwwconsumer = new Sufei();
            //访问数据成员
            wwwconsumer.age = 40;
            wwwconsumer.name = "wwwconsumer";
            Console.WriteLine("嗨,我是{0},我今年{1}岁了。", wwwconsumer.name, wwwconsumer.age);
            //调用函数成员
            wwwconsumer.WriteAticle();
            wwwconsumer.JiangLi();
            wwwconsumer.JiangLi();


        }
    }
}

执行的结果: 类和对象1.JPG
 楼主| 发表于 2014-7-12 05:54:06 | 显示全部楼层
C#通过new运算符创建对象,执行该语句后系统为对象分配内存空间,并通过类的构造函数初始化类的成员变量(每个类都有一个与类同名的构造函数)。创建类的过程叫做类的实例化。一个类有对个对象,它们共享函数成员的代码,但不共享数据成员,每个对象都会在内存中开辟新的空间来贮存自己的数据成员。下面我们来创建Xiaowen和Xiaomao两个Sufei论坛的新成员,并访问这两个对象的变量,观察结果:
[C#] 纯文本查看 复制代码
  class Program
    {
        static void Main(string[] args)
        {
            //申明对象Xiaowen,Xiaomao
            Sufei Xiaowen = new Sufei();
            Sufei Xiaomao = new Sufei();
            //访问数据成员
            Xiaowen.age = 24;
            Xiaomao.age = 25;
            Console.WriteLine("Xiaowen:"+ Xiaowen.age);
            Console.WriteLine("Xiaomao:" + Xiaomao.age);
        }
    }
}
运行结果: 类和对象2.JPG
由此可见,Xiaowen和Xiaomao是两个不同的对象,它们的age是两个不同的数据。
 楼主| 发表于 2014-7-12 06:07:00 | 显示全部楼层
调用函数成员也一样,函数例子如下:
[C#] 纯文本查看 复制代码
class Program
    {
        static void Main(string[] args)
        {
            //申明对象Xiaowen,Xiaomao
            Sufei Xiaowen = new Sufei();
            Sufei Xiaomao = new Sufei();
            //访问数据成员
            Xiaowen.age = 24;
            Xiaowen.name = "小文";
            Xiaomao.age = 25;
            Xiaomao.name = "小毛";
            Console.WriteLine("小文:"+ Xiaowen.age);
            Console.WriteLine("小毛:" + Xiaomao.age);
            //调用类的成员函数
            Xiaowen.WriteAticle();
            Xiaowen.JiangLi();
            Xiaomao.WriteAticle();
            Xiaomao.JiangLi();
        }
    }
}
运行结果: 类和对象3.JPG
 楼主| 发表于 2014-7-12 06:22:12 | 显示全部楼层
在谈谈Public公有成员和Private私有成员的区别,大家看到了吗?在Sufei的类中,只有一个是私有的,对了,就是Hello()函数,它是执行登陆的动作,我们再来看看这段代码
[C#] 纯文本查看 复制代码
//函数:登陆
private void Hello()
{
Console.Write("嗨,我是{0},", name);
}
 
//函数:写文章
public void WriteAticle()
{
Hello();
Console.WriteLine("你的帖子已经被录入精华,谢谢发言");
}

我们在类中定义函数写文章时就调用了登陆这个私有成员,这个是有道理的,因为写文章之前一定要有登陆的动作。这种调用是在类内调用的,是合法的,但如果想在类外主程序CLass program调用Hello() 就会出错。因为,不能在类外调用类的私有成员。如图 类和对象4.JPG
 楼主| 发表于 2014-7-12 07:45:32 | 显示全部楼层
明白了类的公有成员与私有成员的区别,我们再看看公有成员不加限制的访问会带来问题,如:Xiaowen.age= -10,显然语句可以通过编译,但这种无效的数据可能带来灾难性的后果,如会影响我们统计论坛成员的平均年龄,不同年龄段的成员人数等等。为了解决这一问题,c#设计了一种特殊的语法-属性(Property).我们可以在Sufei类中添加如下代码:
[C#] 纯文本查看 复制代码
 class Sufei
    {
        //变量成员 
        public string name;
        public int age;
        public int Age
        {
            get
            {
                return age;
            }
            set
            {
                if (value <= 0)
                    age = 0;
                else
                    age = value;
            }
        }

然后,我们将对象Xiaowen,XIaomao的年龄设置为负数,看看什么效果
[C#] 纯文本查看 复制代码
 {
        static void Main(string[] args)
        {
            //申明对象Xiaowen,Xiaomao
            Sufei Xiaowen = new Sufei();
            Sufei Xiaomao = new Sufei();
            //访问数据成员
            Xiaowen.Age = -24;
           // Xiaowen.name = "小文";
            Xiaomao.Age = -25;
           // Xiaomao.name = "小毛";
            Console.WriteLine("小文:" + Xiaowen.Age);
            Console.WriteLine("小毛:" + Xiaomao.Age);
            
        }
    }
}
执行的效果如下图: 类和对象5.JPG
怎么样,年龄自动恢复为0.
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-11 10:21

© 2014-2021

快速回复 返回顶部 返回列表