C# -----数据类型 字符串 集合 面向对象(大致梳理)

C# -----数据类型 字符串 集合 面向对象

1.常见的数据类型

bool sbyte(带符号 8bit存储) byte(8位无符号) short ushort int uint (没有负数) long ulong char float double decimal(适用于金额的计算) string object

2.默认类型转换

a.当一个子类想转换成它的父类的时候

b.当短精度向高精度转换时 byte —int----long-----float----double

c.decimal所有的整型均可以默认转换为decimal 即除了double float以外有数字类型的均可以

3.数据类型判断:is
4.强制类型转换

在变量前面加目标类型强制转换 (在转型失败时 会抛出错误 直接终止代码)

使用as关键字 标识 将变量x当做类型Y (C c2 = x as Y) (当转型失败时将c2置为null 当前步骤不会抛出异常 如果对于空引用没有进行处理 那么会在后续中抛出空异常)

5.强制 类型转换

存在精度丢失 但是可以接受

例如

long lval =1000; int i = (int)lval;

使用System.Convert类 Convert.ToXXX() 其中 XXX 表示转型目标对象

字符串!

String 变量的声明方式两种:

1.直接使用字面值 比如 String s = “123456”;

2.直接使用构造器 比如 String s = new String (“123123”);

String的构造函数
  1. public String ( char c , int count); 生成数量为count的由C组成的字符串 不包括其他字符
  2. public String(char [ ] value ) ; 将字符数组value 转换为字符串,字符串等于字符数组依次连接生成的字符串
  3. public String ( char [ ] value, int startIndex , int length );将value中的部分元素拼接成字符串 有起始位置 和长度 自行选择
空字符串与Null的含义
  1. 空字符串是一个长度为0的字符串 null没有长度 如果强行获取.length将会抛出异常
  2. 空字符串可以调用字符串的所有方法 null无法调用字符串对象的任何方法
  3. 空字符串指向的是一个内存中的某个地址 null则没有任何指向
判断字符串是否为空
  1. string str = string.Empty;

  2. bool result = str == “” || str string.empty || str.Length0;//用布尔值来判断他里面是否没有东西 是否为空 并且他的长度等于0

c#提供了一个内部默认的支持方法:

string.IsNullOrEmpty(value)

string.IsNullOrWhiteSpace(value) 需要一个非空白字符的字符串的方法

主要集合

数组 链表 列表 set 字典 在c#中 list是类不是接口 接口是IList

  1. Array数组

特点是一经初始化 无法再对数组本身进行增删改查 虽然提供了一些修改数组的扩展方法 但是基本上都会返回新的数组对象

  1. 常用方法

    string item0 = strArr[0];//取出第一个 元素
    string item2 = atrArr[2];//取出第二个元素
    strArr[0] = "3";//将数组中的第一个数字替换为3 
    --------------------------------------------------
    int length = strArr.length;//获取一个整型的长度
    long longLength = strArr.LongLength;//获取一个长整形的长度
    -----------------------------------------------------
     for (int i = 0 ; i< strArr.length; i++ )
     {
         string it = strArr[i];
        
     }//for循环
    foreach  (string it in strArr)
    {
        //依次循环,不需要下标,操作更快
    }//foreach 循环
    -----------------------------------------------------
     //CopyTo 复制到
     string[] strArr1 = new string[]{"1","2","3","4","5","6","7","8","9","10"};
     string[] strArr3 = new string[10];
     strArr1.CopyTo(strArr3, 0); //strArr3 = {"1","2","3","4",'5","6","7","8","9","10"}
    //sort排序 是array提供的一个静态方法
    Array.Sort(strArr1);//自动进行排序 由小到大进行
    //Clone() 获得一个浅拷贝的数组对象
      
    
    
  2. List列表

    //1.初始化
    List<string> list = new list<string >();//初始化一个空的列表
    List<string> list1 = new List<string >{"12","2"};//初始化一个包含两个元素的列表
    List1 = new List<string >(100);//初始化一个空的列表,并指定list的初始容量为100
    list = new List<string >(list1);//使用一List/array初始化一个列表
    --------------------------------------------
    //常用的方法 Count() LongCount()  一个是 int类型  一个是Long 类型
     List<string > list = new List<string >();
    list.Add("12");//在list中添加元素
    List<string> list1 =new list<string>{"14","12"};
    list.AddRange(list1)//在list 末尾添加list1的元素值。
    ---------------------------------------------------
    
    //插入元素方式
        Innsert(int index, T item) // 在index下标处插入一组元素 ,该下标以及之后的元素一次后移
        arr1.InsertRange(2,arr2);
    //判断元素 是否有包含 包含 则返回true 否则返回false
        arr.Contains(8);
    //删除指定元素 
    Renove(T item )
        arr.Remove(3);
    RemoveAt( int index )//删除位于下标的元素
    RemoveRane(IEnumber<T> items)//删除一组元素与Remove一致 如果要删除元素不在列表中 则元素不会发生变化
        GetRange(int index, int count )//从列表中获取第一个子列表,从index开始 获取count 个元素 如果源列表中从index开始剩余的元素比不足count个 则会报错
    --------------------------------------------------
        
     //不常用但有用的方法
        Clear() //删除所有元素
        Reverse()//调转顺序 将 列表按照从尾到头的顺序进行排列
        IndexOf(T item ) //查找下标 如果,没有找到元素 则返回-1
        Sort()//排序 对 列表进行排序 调用方法后 会按照默认排序方法返回一个排序结果
        
        
        
        
    
  3. Set集合

    //Set 集合中不能包含重复的元素 如果尝试存入重复元素集合元素将不会发生任何变化 Set集合中元素的顺序和存放顺序不一定相同 常用的Set集合有HashSet<T> SortSet<T>
    Set<T> set = new HashSet<T>();//初始化
    set.Add(item );//添加元素
    set.Remove(item);//删除集合中等于item的元素
    UnionWitn  set.UnionWith() //并集
    ExceptWith  set.ExceptWith()// 差集
    IntersectWith set.IntersectWith() // 交集
    SymmetricExceptWith set.SymmetricExceptWith() //余集
    Contains   set.Contains(1); //判断集合中是否包含目标元素 返回true false
    
       
    
  4. Dictionary 字典

    Dictionary<string , int > dict = new Dictionary<string ,int>();//字典的初始化相当于键值对
    dict.Add("1",2);//添加一个元素 键和值
    .Count // 获取 键值对的数量
    .Keys // 获取 字典里面所有的键 然后把它看作是一个 hashset来返回
    .Remove() // 删除字典中对应的元素 
    ---------------------------------------------------------
       ContainsValue()//是否包含值  
       Values //获取值的集合 和上面的keys 差不多的
    
  5. 其他集合

    1. ArrayList 返回值是Obbject 类型
    2. SortedList 排序键值对的集合
    3. HashTable 根据hash代码组织进行的集合
    4. Queue 队列 初始化: Queue queue = new Queue(); Queue queue =new Queue();
    5. LinkedList 链表
    6. Stack stack 栈
面向对象
  1. 创建一个类
public class Person    {
  private string name ;//字段 
    public string name    //属性 
{
 get { return name;} 
    set{name = value;}
}
    public Person (){
        // 方法
        
    }
}
  1. 面向对象三大特征 封装 继承 多态
  2. 访问权限控制符 private:同属于一个 类的 成员才能够访问 protected:当前类的成员 子类可以访问 internal 默认访问权限 类的internal关键字可以省略 方法省略则表示的是protected public 公开 所有能引用类的地方都能访问public对象 最开放的权限
class HellWord
{
    static void Main (string[] args )
    {
        Person p = new Person();
        
        p.SayHello();
    }
    
}
public class Person 
{
    private string name ;
    public string Name
    {
        get { return name }
        set { name=value }
        
    }
    public void SayHello()
    {
        Console.Write("你好呀,我叫"+Name);
    }
}
//继承  一个类只有一个父类 class B:A 表示B继承A
//关键字 virtual 关键字 生命函数为虚函数  表示该子类可能会重写该方法
// 关键字 override  用在子类 用来声明 该方法是重写父类的方法
//new 跟实例化对象的new不同 这个放在方法前的意思是该方法会隐藏父类的方法实现
//saled  如果看到一个类有这个标记  那么 需要知道这个类是不可以被继承的类
public class A 
{
    public virtual void Say()
    {
        
    }
    public void Look()
    {
        
    }
}
public class B : A
{
    public override void Say()
    {
        Console.Write("我可是会说话的");
    }
}
-----------------------------------------------------
    

  1. 类和接口 类和接口的声明方式不同 类用的关键字是class 而接口用的关键字是interface 类是继承 接口是实现 一个类只能有一个父类 接口可以有多个实现 接口中的所有方法都是public的 因为接口就是用来定义规范的,所以一旦他的方法不是public的话那将没有任何的意义
public class Demo
{
    
}
public interface IDemo
{
    string Method ();
}
public class Demo3 : Demo,IDemo
{
    public string Method()
    {
        return "test";
        
    }
    string IDemo.Method()
    {
        return "test2";
    }
}
//先继承 后实现  实现接口的方法 上面写了两种 不同的地方是他们的使用  接口优先使用接口名.方法名 作为实现方法 两种方法可以共存

Object 类 常用方法 四个基本方法

  1. Equals(object obj) 判断两个对象是否相等的依据

  2. GetType() 返回这个对象的类型 反射中

  3. ToString() 返回字符串 获得一个对象的文字描述 默认返回的是对象的地址描述信息,这个方法建议重写

  4. GetHashCode() 返回hash值 某些集合和程序机制会以hashcode作为元素的相等性判断依据 所以建议在重写Equals之后还要重写这个方法 并保证两个方法对于相同的对象做相等性结果判定 应该是表现一致。

  5. 面向对象模拟

    class program
    {
        static void Main(string [] args )
        {
            Person p  = new Person();
            p.Name="三三";
            p.age="23";
            p.gender="叭"
            p.Say();
            Console.ReadKey();
         
            
        }
    }
    public class Person 
    {
        private string _name;
        public string Name
        {
            get{return name}
            set{ _name  = value}
        }
        private int _age;
        public int Age
        {
            get {return _age}
            set
            {
                if (value<0 || value>100)
                  { value = 0;}  
                _age = value;
            }
            
        }
        private char _gender;
        public char Gender
        {
            get{
                if(_gender !="男"&&_gender !="女")
                {
                    return _gender = "男";
                }
                return _gender;
            }
            set{
                _gender = value;
            }`在这里插入代码片`
        }
        public void Say(){
            Console.WriteLine("我是{0},我今年{1} ,我是{3}  生,我可以说话",this.Name,this.age,this.gender)
        }`在这里插入代码片`
    }
    
    public class Person
    {
        private static string _name;
        public static string Name
        {
            get{return Person._name;}
            set{Person._name = value;}
            
            
        }
       
    }
    

    文章同时借鉴了 --不做码农的开发者 该公众号的文章以及自己的整理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是貔貅喔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值