😜C#介绍
源于c语言,简单易学,入门超快,减少了烦人的指针,有统一的操作符/修饰符/运算符,使用起来简洁称心。不仅如此:
-
她是结构化语言,能产生高效率的程序
-
面向组件,开发快速
-
在多种计算机平台上编译,良好兼容性
-
优秀的版本管理控制,安装卸载和其他程序不影响
-
点Net框架一部分
-
都是她被广泛应用的原因。
她不仅是按照面向对象设计的语言,而且还类型安全,还有更多让人舒心的功能:
-
自动垃圾回收
-
属性、事件、委托等
-
标准库
-
简单多线程
-
Lambad表达式
虽然c#和Java她们在内部功能实现及性能上不同,代码依赖也不同(Java依赖JVM,c#依赖.NET),但是她们仍然有很多相似之处,这对于Android出身的我来说更得心应手。
😜.NET简介
.NET框架是一个集成、一个环境、一个非常强大的平台,是微软推出的核心技术。开发式的体系结构,覆盖的内容非常广:
由上图看出.NET Framework是.NET最重要的核心技术。Framework提供了多语言开发,而C#是其中核心语言。
😜VS快捷键
先来普及回顾下VS中的常用快捷键
Ctrl+K+D:快速对齐代码
Ctrl+Z:撤销
Ctrl+S:保存(一定要经常保存!)
Ctrl+J:快速弹出智能提示
Shift+End 、Shift+Home
Ctrl+K+C:注释所选代码
Ctrl+K+U:取消对所选代码的注释
F1:转到帮助文档
折叠冗余代码:#Region 和#EndRegion(Android Studio也可以自定义折叠代码 //region //endregion 快捷键 Ctrl+Alt+T)
单行注释: //
多行注释:/要注释的内容/
文档注释: /// 多用来解释类或者方法
😜数据类型
编程基础就不强调了,主要看看拼写和其他语言有什么不同就行了
除了这些值类型还有引用类型,包含对象类型,动态类型,字符串类型
字符串类型:string或者String,注意s大小写,平时都能用,但也有也小区别。
字符串有个@符号可以将转移字符当成普通字符,且@符会保留字符串里面的换行符空格符等
例:string str=”D:\alibaba”; 等价于string str=@”D:\alibaba”;
动态类型:dynami,他会根据内容自动存储对应类型
例:dynamic str=”这是字符”; dynamic number=10; 就像前端的var类型
对象类型:ogject,所有类型的最低基类,能分配任何类型的值,麻烦就是用的时候可能经常得进行类型转换。
😜转义字符
😜运算符
仍然是直接上表格图,编程基础。
😜判断/循环
逻辑判断仍然是编程老鸟的基基础,只是简单概括一下
判断语句:if else switch
循环语句:while for foreach do…while break continue
😜访问修饰符
C#可以设置使用者的访问权限,这样开发者可以指定该模块或逻辑是公开,封闭,还是指定访问者。不知道其他语言什么样,跟Java是一样样的。
-
public:所有对象都可以访问;
-
private:对象本身在对象内部可以访问;
-
protected:只有该类对象及其子类对象可以访问
-
internal:同一个程序集的对象可以访问;
-
protected internal:访问限于当前程序集或派生自包含类的类型。
😜可变类型/合并运算符
可空类型(Nullable):表示其基础类型除了默认的值外,再添加一个null值。例如:int? num = 1; double? num= new double?();
Null合并运算符(??):如果第一个操作数为null,则返回第二个操作数,否则返回第一个,就像Java的?:运算。
例如 A=B??C 如果B为空则将C赋值给A,如果B 不为空则将B赋值给A。
😜数组
数组类型是若干个数据类型相同的数据元素组成的数据结构。C#也是分为一维数组和多维数组,多维数组又包括矩形数组和交错数据。
还有一个参数数组,可以传递未知数量参数给函数。 这个就像Java中的(int… num)。
例ParamArray app = new ParamArray(); int sum = app.AddElements(512, 720, 250, 567, 889);
数组类型基本是System.Array类的派生类,快捷键Ctrl+左键进入源码,快速学习都有什么功能实现。
😜结构体
她能用单一变量存储多个数据类型,举例:一个书变量,可以存作者,标题,出版社,价钱等基础变量。超好理解,和Java的实体一样,就是需要struct关键字来修饰创建结构体。特点:
-
结构可带有方法、字段、索引、属性、运算符方法和事件。
-
结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义无参构造函数。无参构造函数 (默认)是自动定义的,且不能被改变。
-
与类不同,结构不能继承其他的结构或类。
-
结构不能作为其他结构或类的基础结构。
-
结构可实现一个或多个接口。
-
结构成员不能指定为 abstract、virtual 或 protected。
-
当您使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。与类不同,结构可以不使用 New 操作符即可被实例化。
-
如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被使用。
结构体的字段可以加前缀”_”来和变量区分
结构体快捷键:首选选中你要自动完成的变量,先按ctrl+R,再按ctrl+E这两个组合键,可以自动生成属性中的get和set方法
😜枚举
就是命名一组整型常量,不能继承或传递继承,只能当常量使用。举例:enum Number{one,two,three}; 则Number.one等于0 Number.two等于1,以此类推
枚举可以和结构体结合:
public struct Person{
public string _name;//字段
public int _age;
public Gender _gender;
}
public enum Gender {
男,
女
}
Person zsPerson;
zsPerson._name = “张三”;
zsPerson._age = 21;
zsPerson._gender = Gender.男;
😜类/函数
类仍然是class修饰,在class前面可以指定对类及成员的访问规则,若没写则类默认是internal,成员访问是private。
例:public class ClassName { }
函数和Java同样含有构造函数和带参函数,在这多了一个析构函数,是一个特殊的成员函数。是一个新知识需要记一下。
析构函数以~作为前缀,不需要任何修饰符,不返回值,也不带参数,不能继承或重载。官方文档大致意思就是用来释放资源的,只不过并非是在不使用的时候立即释放,她是懒惰的,垃圾回收机制会在适当的时候回收,比如内存紧张,关闭程序等时候。这和Android里面的onDestory有异曲同工之妙,同样的,也有GC方法来强制回收。
😜继承/多重继承
继承是面向对象设计的最重要概念之一,一个类继承自另一个类,举例:
class A{ } class B:A{ } B继承自A,B可以称为派生类也可以称为子类,A可以称为基类也可以称为父类。(派生类和基类,子类和父类) 。 B拥有访问A的能力,形象点说就是子类可以拿到父类的财产,父类拿不到子类的财产。
C#不支持多重继承,我咨询过C++同事,C++支持多重继承。
😜多态
面向对象程序的核心功能之一,是同一个行为具有多个不同表现的能力。C#和Java都是面向对象的,她们的多态思想基本是一致的。优点多多:
-
消除类型间耦合关系
-
具有可扩充性,增强灵活性
-
接口性,实现简单
C#包含静态多态和动态多态,静态多态又包含:函数重载和运算符重载。
函数重载:就是相同的函数名有多个定义。函数的参数类型或个数不同来实现。例如:
int test(int num1){}
int test(int num1,int num2){}
int test(int num1,string str1){}
运算符重载看示例更形象,但是示例代码多,就不在这记了,感兴趣的可以自己去搜索学习
动态重载使用的是用abstract创建的抽象类,另一个事借助关键字virtual修饰的虚方法类似实现。示例
namespace Test
{
abstract class Shape
{
abstract public int area();
}
class Rectangle: Shape
{
private int length;
private int width;
public Rectangle( int a=0, int b=0)
{
length = a;
width = b;
}
//注意着的override
public override int area ()
{
Console.WriteLine(“Rectangle 类的面积:”);
return (width * length);
}
}
class RectangleTester
{
static void Main(string[] args)
{
Rectangle r = new Rectangle(10, 7);
double a = r.area();
Console.WriteLine(“面积: {0}”,a);
Console.ReadKey();
}
}
}
//虚方法示例
namespace Test
{
class Shape
{
protected int width, height;
public Shape( int a=0, int b=0)
{
width = a;
height = b;
}
// 关键字virtual
public virtual int area()
{
Console.WriteLine(“父类的面积:”);
return 0;
}
}
class Rectangle: Shape
{
public Rectangle( int a=0, int b=0): base(a, b)
{
}
public override int area ()
{
Console.WriteLine(“Rectangle 类的面积:”);
return (width * height);
}
}
class Triangle: Shape
{
public Triangle(int a = 0, int b = 0): base(a, b)
{
}
public override int area()
{
Console.WriteLine(“Triangle 类的面积:”);
return (width * height / 2);
}
}
class Tester
{
static void Main(string[] args)
{
Rectangle r = new Rectangle(10, 7);
Triangle t = new Triangle(10, 5);
c. area ();
c. area ();
Console.ReadKey();
}
}
}
😜接口
接口使用interface关键字声明,和类class的声明差不多,默认是public类型的。有个当有多个类,多个类有多个相同的方法,使用接口来实现方便管理,且不会丢失。和Java使用基本是一致的。示例:
interface ITestInterface
{
void TestInterfaceMethod();
}
public class Test : ITestInterface{
public void TestInterfaceMethod()
{
}
}
😜命名空间
Namespace这玩意就是用来方便管理的,而且在计算机中相同的设计思想到处可见,比如同一个文件夹下不同有同名的文件,你放在不同文件夹下可以有同名文件。
作者2013年从java开发,转做Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在。
参与过不少面试,也当面试官 面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!
我整理了一份阿里P7级别的最系统的Android开发主流技术,特别适合有3-5年以上经验的小伙伴深入学习提升。
主要包括阿里,以及字节跳动,腾讯,华为,小米,等一线互联网公司主流架构技术。如果你想深入系统学习Android开发,成为一名合格的高级工程师,可以收藏一下这些Android进阶技术选型
我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。
Java语言与原理;
大厂,小厂。Android面试先看你熟不熟悉Java语言
高级UI与自定义view;
自定义view,Android开发的基本功。
性能调优;
数据结构算法,设计模式。都是这里面的关键基础和重点需要熟练的。
NDK开发;
未来的方向,高薪必会。
前沿技术;
组件化,热升级,热修复,框架设计
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
我在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多,CodeChina上可见;
当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。
不出半年,你就能看出变化!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
义view,Android开发的基本功。
[外链图片转存中…(img-8ZLkwOI2-1715341396316)]
性能调优;
数据结构算法,设计模式。都是这里面的关键基础和重点需要熟练的。
[外链图片转存中…(img-EIrkbqyC-1715341396316)]
NDK开发;
未来的方向,高薪必会。
[外链图片转存中…(img-sae0ghwp-1715341396317)]
前沿技术;
组件化,热升级,热修复,框架设计
[外链图片转存中…(img-NwBESaSs-1715341396317)]
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
我在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多,CodeChina上可见;
当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。
不出半年,你就能看出变化!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!