👉关于作者
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于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款宝藏插件–价值上千元白嫖最新版