C#中析构函数,命名空间及字符串的运用(Ninth day)

又到了总结知识的时间了,今天在云和学院学习了析构函数,命名空间及字符串的处理,现在就为大家总结下来。

理论:

析构函数

不能在结构中定义析构函数。只能对类使用析构函数。

一个类只能有一个析构函数。

无法继承或重载析构函数。

无法调用析构函数。它们是被自动调用的。

析构函数既没有修饰符,也没有参数。

命名空间

•namespace(命名空间),用于解决类重名问题,可以看做“类的文件夹”。

•如果代码和被使用的类在一个namespace则不需要using。

•在不同命名空间下的类调用有两种方法:

–写全称  命名空间.类名

–先using引用命名空间,再调用

(注:using可以声明namespace的引入,还可以实现非托管资源的释放,实现了IDisposiable的类在using中创建,using结束后会自动调用该对象的Dispose方法,释放资源。)

字符串处理

string可以看做是char的只读数组。char c = s[1];

•C#中字符串有一个重要的特性:不可变性,字符串一旦声明就不再可以改变。所以只能通过索引来读取指定位置的char,不能对指定位置的char进行修改。

* 如果要对char进行修改,那么就必须创建一个新的字符串,用s. ToCharArray()方法得到字符串的char数组,对数组进行修改后,调用new string(char[])这个构造函数(暂时不用细研究)来创建char数组的字符串。一旦字符串被创建,那么char数组的修改也不会造成字符串的变化。

•字符串的连接+,两边只要有一个是字符串类型,另一个也会被自动转换成字符串类型

•一切类型都可以调用.ToString()方法转换成字符串类型.

String类常用方法

s1.Equals(s2,StringComparison.OrdinalIgnoreCase),两个字符串进行比较不区分大小写的比较。

ToLower():得到字符串的小写形式。(这个在前面已经总结过)

ToUpper():得到字符串的大写形式; Trim()去掉字符串两端的空白。(这个在前面已经总结过)

•注意字符串是不可变的,所以这些函数都不会直接改变字符串的内容,而是把修改后的字符串的值通过函数返回值的形式返回。s.ToLower()与s=s.ToLower()

•要区分变量名和变量指向的值的区别。程序中可以有很多字符串,然后由字符串变量指向他们,变量可以指向其他的字符串,但是字符串本身没有变化。字符串不可变性指的是内存中的字符串不可变,而不是变量不变。

字符串的分割

string[] Split(params char[] separator):将字符串按照指定的分割符分割为字符串数组;

string[] Split(char[] separator, StringSplitOptions options)将字符串按照指定的char分割符分割为字符串数组( options 取RemoveEmptyEntries的时候移除结果中的空白字符串);

字符串函数详解

•字符串替换:string Replace(string oldValue, string newValue)将字符串中的出现oldValue的地方替换为newValue。例子:名字替换。

•取子字符串:string Substring(int startIndex),取从位置startIndex开始一直到最后的子字符串;

•string Substring(int startIndex, int length),取从位置startIndex开始长度为length的子字符串,如果子字符串的长度不足length则报错。

•bool Contains(string value)判断字符串中是否含有子串value

•bool StartsWith(string value)判断字符串是否以子串value开始;

•bool EndsWith (string value)判断字符串是否以子串value结束;

•int IndexOf(string value):取子串value第一次出现的位置。

•Int IndexOf(string value,int startIndex)

实操:

给前面写的学生类添加构造方法.使在实例化学生类的时候可以通过构造方法对姓名性别年龄语数英等属性赋值,也可以只对姓名和性别赋值.年龄默认为18岁,语数英成绩默认为0分.

–张三 男 18  三科成绩为:90 95 80

–小兰 女 16  三科成绩为:95 85 100

*首先在定义一个类

class Student
    {//给前面写的学生类添加构造方法.使在实例化学生类的时候可以通过构造方法对姓名性别年龄语数英等属性赋值,也可以只对姓名和性别赋值.年龄默认为18岁,语数英成绩默认为0分.
//张三 男 18  三科成绩为:90 95 80
//小兰 女 16  三科成绩为:95 85 100
        string name;
        string gender;
        int age=18;
        int chinese;
        int math;
        int english;
        public Student(string n,int a,string g,int c,int m,int e )
        {
            name = n;
            age = a;
            gender = g;
            chinese = c;
            math = m;
            english = e;
        }
        public Student(string n, string g, int c, int m, int e)
        {
            name = n;
            gender = g;
            chinese = c;
            math = m;
            english = e;

        }
        public void Stt()
        {
            Console.WriteLine("大家好,我叫{0},是{1}同学,今年{2}岁,我的三科成绩为:{3},{4},{5}", name, gender, age, chinese, math, english);
        }

    }

在Main函数里写

static void Main(string[] args)
        {
            Student stu1 = new Student("张三",18,"男",90,95,80);
            Student stu2 = new Student("小兰",16,"女 ",95, 85,100);
            Student stu3 = new Student("小兰", "女 ", 95, 85, 100);
            stu1.Stt();
            stu2.Stt();
            stu3.Stt();
            Console.ReadKey();
        }

运行结果是:

•写一个Ticket类,有一个距离属性(本属性只读,在构造方法中赋值),不能为负数,有一个价格属性,价格属性只读,并且根据距离distance计算价格Price (1元/公里):

–0-100公里        票价不打折

–101-200公里    总额打9.5折

–201-300公里    总额打9折

–300公里以上    总额打8折

有一个方法,可以显示这张票的信息.90公里90块钱

•测试上面的类.

class Ticket
    {
        #region 构造函数
         public Ticket(int distance)
        {
            if(distance<0)
          {
             distance = 0;
          }
           this.distance = distance;
        }
        #endregion
        int  distance;
        public int Distance
        {
            get {
                  return distance;
                }
        }
        double price=500;
        public double Price
        {
            get {
            if(distance<=100 && distance>=0)
            {
                return distance * 1.0;

            }
            else if(distance>=101 && distance<=200)
            {
                return distance * 0.95;
            }
            else if(distance>=201 && distance<=300)
            {
                return distance * 0.9;
            }
                else
            {
                return distance*0.8;
            }

            }
        }
        public void Show()
        {
            Console.WriteLine("{0}公里需要{1}钱",distance,price);
        }
    }
 static void Main(string[] args)
        {
            Ticket t1 = new Ticket(110);
            Console.WriteLine(t1.Price);
            Console.ReadKey();

        }

测试结果:这道题不知道哪里出现问题了,结果并没有运用到Show方法

随机输入你心中想到的一个名字,然后输出它的字符串长度  Length:可以得字符串的长

两个学员输入各自最喜欢的课程名称, 判断是否一致,如果相等,则输出你们俩喜欢相同的课程. 如果不相同,则输出你们俩喜欢不相同的课程.

让用户输入一个日期格式如:2008-01-02,你输出你输入的日期为2008年1月2日

  static void Main(string[] args)
        {
                      Console.WriteLine("请输入日期");
            string date = Console.ReadLine();

            string[] strs = date.Split(‘-‘);

            string datetine = strs[0] + "年" + strs[1] + "月"+strs[2]+"日" ;

            Console.WriteLine(datetine);
            Console.ReadKey();
         }

今天就总结到这里吧,下周一在继续学习吧。加油!

时间: 2024-11-24 18:07:08

C#中析构函数,命名空间及字符串的运用(Ninth day)的相关文章

PHP中的命名空间(namespace)及其使用详解

PHP中的命名空间(namespace)及其使用详解 晶晶 2年前 (2014-01-02) 8495次浏览 PHP php自5.3.0开始,引入了一个namespace关键字以及__NAMESPACE__魔术常量(当然use关键字或use as嵌套语句也同时引入):那么什么是命名空间呢?php官网已很明确的进行了定义并形象化解释,这里直接从php官网copy一段文字[来源]. “什么是命名空间?从广义上来说,命名空间是一种封装事物的方法.在很多地方都可以见到这种抽象概念.例如,在操作系统中目录

Namespacing in PHP (php 中使用命名空间)

最近学习一下php的命名空间,中文文档不多,搜到一篇英文的,讲的还蛮系统的,特此翻译一下,以备以后查阅,大家有什么高见或更深刻或者 更悟透的见解希望能不吝赐教,晚辈感激不尽. 原文: http://code.tutsplus.com/tutorials/namespacing-in-php--net-27203 关于PHP对命名空间的支持,这走过了一段崎岖的历程.感谢的是,从PHP5.3起,加入了对命名空间.php的代码结构也因此提升了了许多.但是,我们究竟该怎样使用命名空间呢? 一.什么是命名

说说PHP中的命名空间相关概念

说说PHP中的命名空间相关概念 1. PHP中的命名空间是什么? 什么是命名空间?"从广义上来说,命名空间是一种封装事物的方法.在非常多地方都能够见到这样的抽象概念. 比如.在操作系统中文件夹用来将相关文件分组.对于文件夹中的文件来说,它就扮演了命名空间的角色.详细举个样例,文件 foo.txt 能够同一时候在文件夹/home/greg 和 /home/other 中存在.但在同一个文件夹中不能存在两个 foo.txt 文件. 另外.在文件夹 /home/greg 外訪问 foo.txt 文件时

oracle中如何判断一个字符串是否含有汉字

oracle中如何判断一个字符串是否含有汉字 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ①全角字符的判断,或者是含有汉字的字符串的判断 本文如有错误或不完善的地方请大家多多指正,ITPUB留言或QQ皆可,您的批评指正是我写作的最大动力. 一.2.2 实验环境介绍 11.2.0.3  RHEL6.5 一.2.3 本文简介 看到网友问,怎么查询表中某个字段数据是不是包含了

PHP判断字符串中是否包含指定字符串,支持中文哦

RT,随手写的 1 /** 2 * 判断字符串中是否包含指定字符串 3 * @var source 源字符串 4 * @var target 要判断的是否包含的字符串 5 * @return bool 6 */ 7 function hasstring($source,$target){ 8 preg_match_all("/$target/sim", $source, $strResult, PREG_PATTERN_ORDER); 9 return !empty($strResul

java中+(加号或字符串连接)运算顺序的问题

由于java中+(加号或字符串连接)的运算顺序是从左向右的,所以一下程序的输出会得到两个不同的结果 1 public class Test { 2 public static void main(String[] args) { 3 System.out.println("ddd"+7+5); 4 System.out.println(7+5+"ddd"); 5 6 } 7 } 结果为ddd75 12ddd

VC中,如何将十六进制字符串转换为十进制数?

原文链接:http://blog.csdn.net/bennyfun79/article/details/6934843 在程序中,我们有时需要将一个十六进制字符串转换为十进制数字.比如: 1 char *ptr="0x11"; 2 int n=0; 3 //我们想让n等于0x11,即17 通常我们在C中,想将一个字符串转换为一整形数字,通常会使用下面的方法: view plaincopy to clipboardprint? 1 char *ptr="123";

Mysql字符串字段中是否包含某个字符串,用 find_in_set

有这样一个需求,在Mysql数据库字符串字段(权限)中,有范围在 1 到 N 之间代表不同权限的值,分别被‘,’分开,现在要取出具有某权限的所有成员列表. 创建表: 1 CREATE TABLE users(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),name VARCHAR(20) NOT NULL,limits VARCHAR(50) NOT NULL); 添加数据: 1 INSERT INTO users(name, limits)

输入一个字符串,输出该字符串中对称的子字符串的最大长度。

public class LongestSymmtricalLength2 { /* * Q75题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度. * 比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4. */ public static void main(String[] args) { String[] strs = { "a","google", "elgoog", "agol