黑马程序员 自学20C#面向对象之命名空间与String

来源:互联网 发布:软件开发热门发展方向 编辑:程序博客网 时间:2024/06/08 05:37
------- ASP.Net+Unity开发、.Net培训、期待与您交流! -------


可变参数

2014/4/18

 

任何类型都可以自动转换为object类型(父类)

public static void WriteLine(string format,params object[]arg);


params:当一个参数用params修饰的话,我们称其为可变参数,就是不用传数组了,可以传元素,编译器会自动将元素组成一个数组。

Console.WriteLine(“{0}{1}{2}”,1,2,3,);

eg:

……Main()

{

 Test(10,20,30)

}

……Test(params int[]arr)                 虽然可以传元素,但仍有类型限制

{}

 

eg:

Test(10,20,30,40)

………                                                   这样写是错的,params无法确定那个是元素,那个是age的

Test(params int[]arr,int age)

Test(int age,params int[]arr)  将可变参数作为最后一个参数


命名空间

用于解决类名重名问题,可以看作”类的文件夹”

命名空间不允许以数字开头,命名空间中放类。

一个命名空间中不见得只放一个(类)文件

当我们访问类时,只能访问到自己命名空间下的类。

 

不在同一个命名空间下的类,不能被直接访问。

若想访问别的命名空间下的类:


1.      通过using引用对方的命名空间。

eg: Console.WriteLine(“”);→using system


2.      写全称:命名空间名+ . +类名

 

eg:

using Testspace;

……

{

 TestClass t = new TestClass();

}

or

{

 TestNameSpace.TestClass t = new TestNameSpace.TestClass();

}

 

system 是.Net框架下的根命名空间

ctrl+ . 再回车,即可自动让系统写命名空间,前提是拼写正确。

 


命名空间下可以包含其他命名空间:

命名空间 . 命名空间(命名空间在内又有一个namespace)

(公司名称  项目名)


命名空间之间的关系是逻辑划分的关系,非物理位置。

 


String类

其实string是一个类

int→ struct System.Int32

string→Class System.String

 

string     可以 看作char的只读数组。

    C语言中: 就是

 

数组可以通过下标来访问:

string s =”hello,World!”

Console.WriteLine(s[2]);      →l


字符串可以看作一个字符数组


只读:

若是从字符串过来的,它只能是只读的,因为是通过索引器来访问的,char数组不能对其字符串再次赋值。

所以字符串一旦赋值,就不能再改变。

 

所以,string可以看作char的只读数组。

 

类方法的调用→该类对象的实例名.方法名

static修饰的→类名.方法名

 

 

string可new可不new


string s =”hello,World!” →就是一个string对象

string的对象只要用””引起来就是产生了一个string对象。


对string中元素的修改:

定义一个char数组:

 

string s=”hello,World!”

char[] chars=s.ToCharArry();

char[1]=”i”;

(变回字符串→调用string的构造方法↓:)

s=new string(chars);

Console.WriteLine(s);   →hillo,World!

 

我们没有办法直接改变string中的char元素,我们只能通过变量名(对象名).ToCharArray();得到一个(char)数组,然后修改这个(char)数组中的元素,最后调用(字符串)string的构造方法,传这个(char)数组来生成一个(新的)String。

 

(实例名可以看作变量名)

 

状态→属性

行为→方法

 

要学会查看MSDN进行自学。

词汇小结:

object:  物体

params: 参数(s)

练习:

class Program    {        static void Main(string[] args)        {            //练习一:            #region 通过类的实例化来写            Console.WriteLine("输入你想要显示的名字:");            Console.Write("请输入:");            String name = Console.ReadLine();//定义一个name的string类来接收            Name name1 = new Name(name);            int accept = name1.Count();            Console.WriteLine("你输入的名字为:{0},其字符串长度为{1}。", name, accept);            Console.ReadKey();            #endregion            #region 正确的简便写法            do            {                Console.WriteLine("输入名字:");                String name = Console.ReadLine();                if (name == "" || name == " ")                {                    throw new Exception("请重新输入");                }                else                {                    //char[] count = name.ToCharArray();                    Console.WriteLine("你输入的名字为{0},字符串长度为{1}。", name, name.Length);                    break;                }            }            while (true);            Console.ReadKey();            #endregion            //练习二:            //不能判断大小写并且输入完毕才能显示输入错误的版本:            Console.WriteLine("请输入你最喜欢的课程名称");            String class1=Console.ReadLine();            Console.WriteLine("请另一位输入最喜欢的课程名称:");            String class2 = Console.ReadLine();            Class samewhat = new Class(class1,class2);                        samewhat.Show();            Console.ReadKey();        }    } class Name    {        private String name;        public Name(String name)        {            if (name == " " || name == "")            {//如果想在类中判断输入条件,则应当在构造方法内开始判断,而不是对字段进行封装时候判断。                throw new Exception("请输入正确的名字");            }            else            this.name = name;        }        //public String Name//疑问:与构造方法只读的区别 已解决        //{        //    get { return Name}        //}        /// <summary>        /// 这个方法调用.ToCharArray()方法来拆分String类中的各字符,并形成char数组。        /// </summary>        /// <returns>数组名.Length</returns>        public int Count()        {            char[] names = name.ToCharArray();            int count = names.Length;            return count;        }    }class Class    {        private String class1;        private String class2;        public Class(String class1,String class2)        {//用类的构造方法判断有个坏处,就是输入多个变量时,输入完毕才能进入判断。            if (class1 == "" || class1 == " " || class2 == "" || class2 == " ")            {                throw new Exception("请输入正确的名称");            }            else            {                this.class1 = class1;                this.class2 = class2;            }        }        /// <summary>        /// 多写一步这个是为了程序后面对class1的再次赋值。        /// </summary>        public String Class1        {            get { return class1; }            set            {                if (value == "" || value == " " )                {                    throw new Exception("请输入正确的名称");                }                else                {                    class1 = value;                   }            }        }        public void Show()        {            //string classA = class1.ToUpper();/ToLower();            //string classB = class2.ToUpper();/ToLower();            //if (String.Compare(class1,class2,true)==0)//(classA==classB)            if(class1.Equals(class2, StringComparison.OrdinalIgnoreCase))                Console.WriteLine("你俩喜欢一样的课程:" + class1);            else                Console.WriteLine("你俩喜欢不同的课程,分别是{0}和{1}",class1,class2);        }    }



------- ASP.Net+Unity开发、.Net培训、期待与您交流! -------
0 0
原创粉丝点击