当前位置:   article > 正文

C#进阶(三元运算符,静态,方法重构,泛型,继承,接口)_c#三元运算

c#三元运算

一:三元运算符

1.语法形式        condition ? expression1 : expression2; 

condition--是一个bool值--讲解了基本的逻辑判断

如果true则输出expression1它可以是任何合法的表达式,包括常量、变量、函数调用、算术操作

如果false则expression2

  1. int x = 5;
  2. int y = 10;
  3. int max = x > y ? x : y;

二:静态

1.可以直接用类调用--无需先对类进行实例化--属于类的本身

2.原理--类的每个对象具有相同的变量--相同的值--静态字段在内存中只有一份副本,并且在程序的整个执行过程中保持不变。

3.用法:先在Player代码里面--创建static --每有一个物体挂这个组件就会加一

  1. using UnityEngine;
  2. using System.Collections;
  3. public class Player : MonoBehaviour
  4. {
  5. //静态变量是在类的所有实例之间
  6. //共享的变量。
  7. public static int playerCount = 0;
  8. void Start()
  9. {
  10. //通过递增静态变量了解
  11. //已创建此类的多少个对象。
  12. playerCount++;
  13. }
  14. }

调用方法--在其他代码里面直接调用 Player. 

  1. using UnityEngine;
  2. using System.Collections;
  3. public class PlayerManager : MonoBehaviour
  4. {
  5. void Start()
  6. {
  7. //可以使用类名和点运算符
  8. //来访问静态变量。
  9. int x = Player.playerCount;
  10. }
  11. }

不能在静态方法内部--使用非静态类成员变量

因为静态方法属于类---而非静态变量属于类的实例

三:方法重构

意思是可以让你的函数方法名字相同--但是传入的参数类型/参数数量不同

当你调用函数的时候就可以通过你使用的参数--选择是否选择重构的函数

  1. using UnityEngine;
  2. using System.Collections;
  3. public class SomeClass
  4. {
  5. //第一个 Add 方法的签名为
  6. //“Add(int, int)”。该签名必须具有唯一性。
  7. public int Add(int num1, int num2)
  8. {
  9. return num1 + num2;
  10. }
  11. //第二个 Add 方法的签名为
  12. //“Add(string, string)”。同样,该签名必须具有唯一性。
  13. public string Add(string str1, string str2)
  14. {
  15. return str1 + str2;
  16. }
  17. }
  1. using UnityEngine;
  2. using System.Collections;
  3. public class SomeOtherClass : MonoBehaviour
  4. {
  5. void Start ()
  6. {
  7. SomeClass myClass = new SomeClass();
  8. //具体调用的 Add 方法将取决于
  9. //传入的参数。
  10. myClass.Add (1, 2);
  11. myClass.Add ("Hello ", "World");
  12. }
  13. }

四:泛型--Generics

1.原理--类型可以作为参数传递给类和方法 

首先聊一聊泛型的泛型方法

  1. public class SomeClass
  2. {
  3. //通用方法
  4. public T GenericMethod<T> (T param)
  5. {
  6. return param;
  7. }

然后就去尝试调用他

  1. //先实例化类
  2. SomeClass myClass = new SomeClass();
  3. //调用方法
  4. int Result = myClass.GenericMethod<int>(5);
  5. string Result = myClass.GenericMethod<string>("hello");
  6. //如果是明显的类型--可以忽略后面的类型
  7. float Result = myClass.GenericMethod(0.5f);

2.聊一下泛型类

  1. using UnityEngine;
  2. using System.Collections;
  3. //这是一个通用类。注意通用类型“T”。
  4. //“T”将被替换为实际类型,同样,
  5. //该类中使用的“T”类型实例也将被替换。
  6. public class GenericClass <T>
  7. {
  8. T item;
  9. public void UpdateItem(T newItem)
  10. {
  11. item = newItem;
  12. }
  13. }
  1. using UnityEngine;
  2. using System.Collections;
  3. public class GenericClassExample : MonoBehaviour
  4. {
  5. void Start ()
  6. {
  7. //为了创建通用类的对象,必须
  8. //指定希望该类具有的类型。
  9. GenericClass<int> myClass = new GenericClass<int>();
  10. myClass.UpdateItem(5);
  11. }
  12. }

五:继承

一个类--构造函数--函数方法

子类--继承父类--构造函数--如果想要设定指定的父类构造函数--需要 在构造函数后面 :base()

调用基类的构造函数。这样做可以确保基类的构造函数在派生类的构造过程中得到执行

六:多态

实例化的时候---> 父类 起名1 = new 子类()-----向上转换

向下转换可以是

if(起名1 is 子类 )

子类 起名2 = (子类)起名1

七:接口----用于跨多个互不相关的类--意思是继承父类没有意义--实现接口很实用

接口名字一般都是I开头able结尾----public interface IKillable<T>;---  意味着任何内容都具有泛型

要求: 接口中的函数必须被满足---void Kill(T damage)

  1. using UnityEngine;
  2. using System.Collections;
  3. //这是只有一个必需方法的基本
  4. //接口。
  5. public interface IKillable
  6. {
  7. void Kill();
  8. }
  9. //这是一个通用接口,其中 T 是
  10. //将由实现类提供的数据类型的
  11. //占位符。
  12. public interface IDamageable<T>
  13. {
  14. void Damage(T damageTaken);
  15. }
  1. using UnityEngine;
  2. using System.Collections;
  3. public class Avatar : MonoBehaviour, IKillable, IDamageable<float>
  4. {
  5. //IKillable 接口的必需方法
  6. public void Kill()
  7. {
  8. //执行一些有趣操作
  9. }
  10. //IDamageable 接口的必需方法
  11. public void Damage(float damageTaken)
  12. {
  13. //执行一些有趣操作
  14. }
  15. }

八.扩展方法---创建一个类的扩展--必须是静态的

  1. using UnityEngine;
  2. using System.Collections;
  3. //创建一个包含所有扩展方法的类
  4. //是很常见的做法。此类必须是静态类。
  5. public static class ExtensionMethods
  6. {
  7. //扩展方法即使像普通方法一样使用,
  8. //也必须声明为静态。请注意,第一个
  9. //参数具有“this”关键字,后跟一个 Transform
  10. //变量。此变量表示扩展方法会成为
  11. //哪个类的一部分。
  12. public static void ResetTransformation(this Transform trans)
  13. {
  14. trans.position = Vector3.zero;
  15. trans.localRotation = Quaternion.identity;
  16. trans.localScale = new Vector3(1, 1, 1);
  17. }
  18. }
  1. using UnityEngine;
  2. using System.Collections;
  3. public class SomeClass : MonoBehaviour
  4. {
  5. void Start () {
  6. //请注意,即使方法声明中
  7. //有一个参数,也不会将任何参数传递给
  8. //此扩展方法。调用此方法的
  9. //Transform 对象会自动作为
  10. //第一个参数传入。
  11. transform.ResetTransformation();
  12. }
  13. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/93060
推荐阅读
相关标签
  

闽ICP备14008679号