👉关于作者
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
👉前提
自己出身Android开发,因为业务了解也清楚,所以项目开发很快,就决定业余时间学习下其他技术。公司有前端/后端/C++/移动端/动画/模型/硬件/人工智能等多个部门,根据公司发展和自己兴趣,再加上人们对带有立体感的软件渐渐喜爱,决定扩展下此方向,定下了学习c#。开整。
注:因为不是新手,有不少编程经验。所以学习起来很快挑重点学习,记录也是挑重点。适合做成手册,没事翻翻。新手警告:阅读可能有一定困难。
👉实践过程
😜枚举
就是命名一组整型常量,不能继承或传递继承,只能当常量使用。举例: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()
{
}
}
👉其他
📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢欢迎点赞👍收藏🌟留言📝
👉往期分享
熬夜再战Android从青铜到王者-初识技术栈
熬夜再战Android从青铜到王者-UI组件快速搭建App界面
熬夜再战Android从青铜到王者-几个适配方案
熬夜再战Android从青铜到王者-开发效率插件篇
Unity粒子特效系列-龙卷风预制体做好了,unitypackage包直接用!
姐姐喊我解锁套娃新技能:FairyGUI在Unity中实现List嵌套List/立体画廊等,玩出花儿来
Unity新手必备5款宝藏插件–价值上千元白嫖最新版