面向對象

對象:

我們把這些具有相同屬性和相同的方法的對象進一步的封裝,抽象出來類這個概念,類就是模子,確定了對象應該具有的屬性和方法。
對象是根據類創建出來的。

類:

語法:

【public】class  類名
{字段;//Field屬性;//Property方法;//Method
}

寫好一個類,我們需要創建這個類的對象。
那麼我們管創建這個類的對象過程稱之為類的實例化。
使用關鍵字 new;

Person zhangsan = new Person();

this:

表示當前這個類的對象。有時候不加會出錯。

Console.WriteLine("你好我叫{0},我今年{1}歲,我是{2}",this._name,this._age,this._gender);

類是不占內存的,而對象是占內存的。
類的實例化時也就是對象有初值,字段有初值所以就占內存了。

屬性

屬性的作用就是保護字段,對字段的賦值和取值進行限定。
屬性的本質就是兩個方法【1.get 2. set】
get,set都有我們稱之為可讀可寫屬性;
只有get我們稱之為只讀屬性;
只有set我們稱之為只寫屬性;

//字段public string  _name;//屬性public string Name {//當你需要輸出的時候就調用get方法get { return _name; }//當你給屬性賦值的時候會調用set方法set { _name = value; }}

做一個不恰當的例子:字段是女人,屬性是男人,要訪問字段就必須通過屬性。

當然了後期為了保證字段的安全性就需要將字段換成私有的,其他的類就不能直接訪問,就需要屬性裡的get,set方法。當然還可以對字段的輸入進行一些限定。

private int _age;public int AGE {get { return _age; }set {if (value < 0 || value > 100){value = 0;}_age = value;}}

main方法調用

Person zhangsan = new Person();
zhangsan.AGE = -12;
//輸出就是0,因為if判斷了

對性別進行限定:

 private  char _gender;public char Gender {get {if (_gender !='男' && _gender !='女'){return _gender = '男';}return _gender; }set { _gender = value; }}

main方法調用:

//創建Person類的對象Person zhangsan = new Person();zhangsan.Gender = '你';//輸出是男

總結:靜態成員必須使用類名去調用,而實例成員使用對象名調用。
靜態函數只能訪問靜態成員,不允許訪問實例成員
非靜態函數都可以訪問。
靜態類中只允許有靜態成員,不允許出現實例成員


使用:
1.如果你想要你的類當做一個工具類來使用,這個時候可以考慮將類寫成靜態類。
2.靜態類在整個項目裡資源共享。
3.只有在程序結束后才會釋放資源。

堆 棧 靜態存儲區域
靜態的東西都放在靜態存儲區域,越多的話越卡;
釋放資源:GC—Garbage Collection垃圾回收器

構造函數

作用:幫助我們初始化對象(給對象的每個屬性依次賦值)
構造函數是一個特殊的方法:
1.構造函數沒有返回值,連void也不能寫
2.構造函數的名稱必須和類名一致
構造方法可以有重載
創建對象的時候會執行構造函數
類當中會有一個默認的無參的構造函數,當你寫了一個后,不管你寫的是有參的還是無參的,那個默認的都被幹掉了;

new關鍵字

Student sd = new Student("張三",12,'男',45);

new幫我們做了三件事:
1.在內存中開闢了一塊空間
2.在開闢的空間裡創建對象
3.調用對象的構造函數進行初始化對象

this關鍵字

1.代表當前類的對象
2.在類當中顯示的調用本類的構造函數 語法 — :this
我覺得是重載,this上邊有參數調用多的,下邊調用少的可以用this調用上邊全的,可以避免代碼冗餘

public Student(string name, int age, char gender, int english){this.Name = name;this.Age = age;this.Gender = gender;this.English = english;}public Student(string name,int age):this(name,age,' ',45) { }

調用

Student dsd = new Student("李四",45,'女',78);dsd.SayHell();dsd.SayScore();Console.ReadKey();Student hh = new Student("王五",78);hh.SayHell();hh.SayScore();Console.ReadKey();

析構函數

當程序結束的時候 析構函數才執行
幫助我們釋放資源,不過GC可以自動進行垃圾回收如果想盡快釋放就用析構函數

~Student() {Console.WriteLine("我是析構函數");}

命名空間

可以認為類是屬於命名空間的
如果當前項目沒有這個類的命名空間,需要我們手動的導入類的所在就是引入命名空間。
手動添加,提示添加
在一個項目添加另一個項目的類
1.添加引用
2.引用命名空間

using _01複習//這樣就可以使用了

值類型和引用類型

區別:
1.值類型和引用類型在內存存儲的地方不一樣
2.在傳遞值類型和傳遞引用類型的時候,傳遞的方式不一樣
值類型我們稱之為值傳遞,引用類型我們稱之為引用傳遞
值類型:int,double,bool,char,decimal,struct,enum,
引用類型:string,自定義類,數組
存儲:
值類型的值存儲在內存的棧中。
引用類型的值存儲在內存的堆中。

字符串

字符串的不可變性;
一般的如int等重新賦值的就把原來的值幹掉,但是字符串從新賦值原來的值並沒有被銷毀,而是從新在堆內開闢新的空間存儲新的值。
這樣會產生垃圾,等待程序結束后GC掃描沒有指向的值才會清理垃圾。
可以將string類型,看做是char類型的一個只讀數組;

修改string裡邊的一個字符
ToCharArray();將字符串轉化char數組;
new string(char[] chs);能夠將char數組轉化為字符串。

測試string開空間測試

string str = null;//00:00:00.9660700StringBuilder sb = new StringBuilder();//00:00:00.0168688Stopwatch sw = new Stopwatch();sw.Start();for (int i = 0; i < 100000; i++){//str += 1;sb.Append(i);}sw.Stop();Console.WriteLine(sw.Elapsed);Console.ReadKey();

str花費了大量的時間開空間,所以for循環用了00:00:00.9660700
StringBuilder();只用了00:00:00.0168688

字符串的各種方法

Length:得到字符串的長度

string name = "sadfsadf";
Console.WriteLine(name.Length);

ToUpper():將字符轉換成大寫。
ToLower():將字符轉換成小寫。

            string name = "sadfasf";name = name.ToUpper();Console.WriteLine(name);//SADFASF

Equals():比較字符是否一樣(name.Equals(age,StringComparison.OrdinalIgnoreCase))參數是忽略大小寫

            string name = "sadfasfKJHH";string age = "sadfasfKJhh";if (name.Equals(age,StringComparison.OrdinalIgnoreCase)){Console.WriteLine("兩個字符一樣");}

Split():切割,chs裡邊的東西不要,StringSplitOptions.RemoveEmptyEntries:不要空格

            string name ="sadfa   s  f K J _  =  +  ,HH";char[] chs = {' ', '_', '=', '+' };string[] str = name.Split(chs,StringSplitOptions.RemoveEmptyEntries);

提取日期

string date = "2021-12-1";char[] chs ={'-'};string[] day = date.Split(chs,StringSplitOptions.RemoveEmptyEntries);Console.WriteLine("{0}年{1}月{2}日",day[0],day[1],day[2]);


替換關鍵字
Contains(“老趙”);判斷是否出現
.Replace(“老趙”, “***”):將之替換

            string str = "關鍵字老趙";if (str.Contains("老趙")){str = str.Replace("老趙", "***");}Console.WriteLine(str);


.Substring(起始位置); -->从起始位置到末尾

string str = "關鍵字老趙";
str=str.Substring(1);
Console.WriteLine(str);//鍵字老趙

.Substring(起始位置,长度);

string str = "關鍵字老趙";
str=str.Substring(1,2);
Console.WriteLine(str);//鍵字

.StartsWith(“關”)):是不是以關開頭。
.EndsWith(“趙”):是不是以趙結尾

string str ="關鍵字老趙";
if (str.EndsWith("趙"))
{Console.WriteLine("是的");
}else
{Console.WriteLine("不是");
}

str.IndexOf(‘關’);得到關字出現的位置,索引數字
int index = str.IndexOf(‘關’,2);這個是找第二次出現的位置
str.LastIndexOf(‘老’);最後一次出現

            string str = "關鍵字老趙";int index = str.IndexOf('關');Console.WriteLine(index);


str=str.Trim();去掉前后的空格
str.TrimStart();去掉前边的空格
str.TrimEnd();去掉后边的空格

string str = String.Join("|", names);
String.Join(‘进行连接的字符’,字符串数组);//拼接字符

C#-笔记-面向对象-第一章相关推荐

  1. Java 学习笔记:第一章 Java入门

    Java 学习笔记:第一章 Java入门 1.1 计算机语言发展史以及未来方向 1.2 常见编程语言介绍 C语言 C++ 语言 Java语言 PHP 语言 Object-C和Swift 语言 Java ...

  2. 《Oracle DBA工作笔记》第一章

    <Oracle DBA工作笔记>第一章 BLOG文档结构图I 本文简介 建荣的新书<Oracle DBA工作笔记>拿到手了,下午离下班还有1个小时的时候有空了,就阅读了下新书的 ...

  3. 数字图像识别笔记(第一章绪论)

    title: 数字图像识别笔记(第一章绪论) categories: 数字图像识别 tags: 数字图像识别 date: 2020/9/29 23:59 mathjax: true toc: true ...

  4. 学习笔记-应用光学 第一章 几何光学的基本定律

    学习笔记-应用光学 第一章 几何光学的基本定律 1-1 发光点.波面.光线和光束 发光点:本身发光或被照明后发光的几何点 波面:发光点在某一时刻发出的光形成波面 (在各向同性均匀介质中波面是球形) 光 ...

  5. oracle小麦苗博客,《Oracle DBA工作笔记》第一章

    <Oracle DBA工作笔记>第一章 1BLOG文档结构图 2本文简介 建荣的新书<Oracle DBA工作笔记>拿到手了,下午离下班还有1个小时的时候有空了,就阅读了下新书 ...

  6. 001.宋浩老师《线性代数》笔记(第一章行列式)

    宋浩老师<线性代数>笔记(第一章行列式) 目录 1.1 行列式 1.1.1二阶,三阶行列式和排序 1.1.2 n阶行列式 1.2 行列式的性质 1.3  行列式按行展开 1.4 行列式的计 ...

  7. PMBOK(第六版) 学习笔记 ——《第一章 引论》

    系列文章目录 PMBOK(第六版) 学习笔记 --<第一章 引论> PMBOK(第六版) 学习笔记 --<第二章 项目运行环境> PMBOK(第六版) 学习笔记 --<第 ...

  8. 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符

    Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...

  9. 马丁福勒《UML精粹》读书笔记_第一章

    马丁福勒<UML精粹>读书笔记_第一章 UML的使用场景 必须遵从UML规则吗? 在上述草图.蓝图的场景下,不必过多强调遵从UML规则.因为我们使用UML的目的是为了一个好的设计,所以应将 ...

  10. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第一章 配置python环境

    黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第一章 配置python环境 文章目录 黑帽python第二版(Black Hat Python 2nd ...

最新文章

  1. 没有到主机的路由_网络基础知识:UDP协议之路由跟踪
  2. log4j添加日志一定记住在工程的web.xml文件下加一些内容
  3. BLE通信过程中,一次连接间隔最多可以发多少包,BLE的最大通信速度为多少
  4. php怎么控制递归多少次,关于一个PHP递归处理统计的问题
  5. 前端学习(2305):react之脚手架基本创建
  6. Webx框架:Pipeline基本介绍
  7. python设计函数isleapyear_Python实战练习——打印日历教程
  8. blender使用_用Blender教青少年3D动画
  9. Label-dependent Feature Extraction in Social Networks for Node Classification
  10. 通俗易懂的机器学习入门
  11. 9.26-CSS 背景 字体 文本 边框 以及其他
  12. 18. JavaScript event 对象
  13. php mysql join查询结果_PHP mySQL表JOIN查询 - 最有效的方法?
  14. 九万字的JavaWeb学习记录,从入门到入坟,更近一步
  15. linux内核 can总线,基于Linux的PC104总线与CAN总线通信设计
  16. 计算两个经纬度点之间的距离
  17. 如何快速通过阿里云ACP 认证?
  18. jQuery serialize()、serializeArray()方法实现表单序列化
  19. python模板注入_BUUCTF/护网杯 easy_tornado 模板注入
  20. 普林斯顿大学计算机专业,普林斯顿大学计算机专业就业前景怎么样?

热门文章

  1. DICOM世界观●开篇
  2. initialize php,THINKPHP的_initialize方法
  3. 我给VSCode报了个bug,微软工程师凌晨这样回复我...
  4. 〖全域运营实战白宝书 - 高转化文案速成篇④〗- 如何撰写摘要型文案?
  5. 未转变者服务器.id大全,Unturned未转变者Elver最新地图ID汇总 2021最新版ID大全[多图]...
  6. 企鹅号不更新会封_我们如何为企鹅基金会筹集60,000美元
  7. 微信网页游戏刷分BUG利用——抓包分析记录
  8. python 执行linux rm命令_Linux rm命令:删除文件
  9. Win10 LTSB/LTSC安装微软商店/Microsoft store
  10. 网页版Instagram如何发照片