在方法中的参数分为形参和实参,形参就是方法定义时写的数据类型 参数名 ,实参就是调用方法实际传进的参数,class="superseo">c#除了形参和实参之外还有引用参数ref和输出参数out,引用参数在定义和使用时都得用ref ,输出参数也是,引用参数必须是变量,输出参数在定义时不用指定值
namespace ConsoleApplication1
{
class RefClass
{
public bool Judge(ref int num)
{
if (num%5==0)
{
return true;
}
return false;
}
}
}
class Program
{
static void Main(string[] args)
{
OutClass outClass = new OutClass();
bool rs;
outClass.Judge(22,out rs);
Console.WriteLine(rs);
}
}
部分类
partial部分类详解,这个java里面就没有这种东西
定义部分类的形式如下:
访问修饰符 修饰符 partial class 类名 {.....}
这个部分类的作用就是看作将类拆成多个部分,为什么要拆成多个部分,内容相似或者比较多时可以采用如此的做法
部分类中可以直接使用成员变量
namespace ConsoleApplication1
{
public partial class Course
{
public int Id { get; set; }
public string Name { get; set; }
public double Points { get; set; }
}
public partial class Course
{
public void PrintCoures()
{
Console.WriteLine("课程编号"+Id);
Console.WriteLine("课程名称" + Name);
Console.WriteLine("课程学分" + Points);
}
}
}
Course course = new Course();
course.Id = 1001;
course.Name = "c#部分类";
course.Points = 3;
course.PrintCoures();
部分方法
有部分类也有部分方法
部分方法就是在部分类中对方法进行扩充
使用部分方法就需要注意如下3点:
- 部分方法必须是私有的,并且不能使用virtual,abstract,override,new,sealed,extern等修饰词
- 部分方法不能有返回值
- 部分方法中不能使用out类型的参数
部分方法都得使用partial关键字不然就会报错
namespace ConsoleApplication1
{
public partial class Course
{
public int Id { get; set; }
public string Name { get; set; }
public double Points { get; set; }
//部分类的结合
partial void PrintCoure();
public void PrintMsg()
{
PrintCoure();
}
}
public partial class Course
{
partial void PrintCoure()
{
Console.WriteLine("课程编号"+Id);
Console.WriteLine("课程名称" + Name);
Console.WriteLine("课程学分" + Points);
}
}
}
字符串
在c#中字符串对象是可以当作java中的数组来用的,例如下面:
string a="我爱西红柿炒鸡蛋"
//获取字符串中的西字
console.writeLine("获取的字符为{0}",a[2]);
字符串的相关方法 常见方法有:
1 Length 获取字符串的长度,即字符串中字符的个数
2 IndexOf 返回整数,得到指定的字符串在原字符串中第一次出现的位置
3 LastlndexOf 返回整数,得到指定的字符串在原字符串中最后一次出现的位置
4 Starts With 返回布尔型的值,判断某个字符串是否以指定的字符串开头
5 EndsWith 返回布尔型的值,判断某个字符串是否以指定的字符串结尾
6 ToLower 返回一个新的字符串,将字符串中的大写字母转换成小写字母
7 ToUpper 返回一个新的字符串,将字符串中的小写字母转换成大写字母
8 Trim 返回一个新的字符串,不带任何参数时表示将原字符串中前后的空格删除。 参数为字符数组时表示将原字符串中含有的字符数组中的字符删除
9 Remove 返回一个新的字符串,将字符串中指定位置的字符串移除
10 TrimStart 返回一个新的字符串,将字符串中左侧的空格删除
11 TrimEnd 返回一个新的字符串,将字符串中右侧的空格删除
12 PadLeft 返回一个新的字符串,从字符串的左侧填充空格达到指定的字符串长度
13 PadRight 返回一个新的字符串,从字符串的右侧填充空格达到指定的字符串长度
14 Split 返回一个字符串类型的数组,根据指定的字符数组或者字符串数组中的字符 或字符串作为条件拆分字符串
15 Replace 返回一个新的字符串,用于将指定字符串替换给原字符串中指定的字符串
16 Substring 返回一个新的字符串,用于截取指定的字符串
17 Insert 返回一个新的字符串,将一个字符串插入到另一个字符串中指定索引的位置
18 Concat 返回一个新的字符串,将多个字符串合并成一个字符串****
数据类型转换分为两种一种为隐性转换,一种为显性转换
隐性转换经常用在整数类型和浮点数类型小类型转成大类型中,在整数中有符号的隐式转换和java是一样的,无符号的隐式转换就可以转成有符号的哦
从 sbyte 类型到 short,int,long,float,double,或 decimal 类型。
从 byte 类型到 short,ushort,int,uint,long,ulong,float,double,或 decimal 类型。
从 short 类型到 int,long,float,double,或 decimal 类型。
从 ushort 类型到 int,uint,long,ulong,float,double,或 decimal 类型。
从 int 类型到 long,float,double,或 decimal 类型。
从 uint 类型到 long,ulong,float,double,或 decimal 类型。
从 long 类型到 float,double,或 decimal 类型。
从 ulong 类型到 float,double,或 decimal 类型。
从 char 类型到 ushort,int,uint,long,ulong,float,double,或 decimal 类型。
从 float 类型到 double 类型。
Convert方法是数据类型转换中最灵活的方法,它能将任意数据类型的值转成任意数据类型
数据类型 变量名=convert.to数据类型(变量名)
Convert.ToInt16() 转换为整型(short)
Convert.ToInt32() 转换为整型(int)
Convert.ToInt64() 转换为整型(long)
Convert.ToChar() 转换为字符型(char)
Convert.ToString() 转换为字符串型(string)
Convert.ToDateTime() 转换为日期型(datetime)
Convert.ToDouble() 转换为双精度浮点型(double)
Conert.ToSingle() 转换为单精度浮点型(float)
C#装箱和拆箱思想
c#语言中数据类型分为值类型和引用类型,值类型转成引用类型被称为装箱思想,引用类型转成值类型被称为拆箱思想
正则表达式
匹配字符
1 . 匹配除换行符以外的所有字符
2 \w 匹配字母,数字,下划线
3 \s 匹配空白符
4 \d 匹配数字
5 \b 匹配表达式的开始或结束
6 ^ 匹配表达式的开始
7 $ 匹配表达式的结束
表示重复的字符
1 * 0次或者多次字符
2 ? 0次或1次字符
3 + 1次或多次字符
4 {n} n次字符
5 {n,M} n到m次字符
6 {n,} n次以上字符
数组
数组都是由连续内容位置组成的,最低的地址对应第一个元素,最高的地址对应最后一个元素
具体内容与java类似
枚举类型
具备相同属性的有限数据的集,通常用于常量定义,枚举是定义在类中的,其使用有点像类的属性就是通过**.**直接调用
访问修饰符 enum 变量名:数据类型{
值1,
值2
}
//注意上面的数据类型不能是string。。。这点有点无语
结构体
结果体是类似于类但它是值类型的,它通常定义于类或者在命名空间下进行定义中能够想要进行使用它得进行new出来,咋感觉像内部类的感觉,它有关键字struct的,例子如下:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
student stu = new student();
stu.Name = "张三";
stu.Age = -100;
Console.WriteLine("学生的信息为");
Console.WriteLine(stu.Name+":"+stu.Age);
}
}
struct student
{
private string name;
private int age;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public int Age
{
get
{
return age;
}
set
{
if (value < 0)
{
value = 0;
}
else
{
age = value;
}
}
}
}
}
继承
在C#语言中仅支持单继承,这点和java很像都是解决代码的重用问题
c#继承的特点:
- 派生类是对基类的扩展,派生类可以添加新成员,但是派生类不能够动态移除基类的成员
- 继承是传递的,类的话就是单继承,接口的话类就可以多实现
- 构造函数和析构函数不能被继承,其他的成员都能被继承,基类的成员的访问方式决定是否被后代访问
- 派生类如果定义了与基类相同名称的新成员时,新成员会覆盖旧成员,但不会删除旧成员,只是不能访问(java这点相似,但是java是有办法访问旧成员(super),c#通过base.基类的成员)
- 单继承
object是c#语言中最原始,最重要的类,是所有类的“祖先”,每个类都是该类的子类,这些子类是直接或间接从object中继承来的,object中有四个常用的方法equals,gethashcode,gettype,tostring
如果是想要简单比较两个对象是否相等是可以通过获取gethashcode来进行比较,但是如果相等的情况下可以根据equals来进行最后保证比较,之所以用gethashcode是因为效率高,只是比较对象的某些特征,equals可以理解为完全比较
还有一个点就是方法在进行重写的时候必须在新成员加上关键字override这时候才不会报错。。。这点和java不同,java是直接进行重写就行压根就不用写关键字
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)