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

本文介绍了C#编程中的关键概念,包括三元运算符的使用,如何通过静态成员共享类的数据,方法的重构以处理不同参数,泛型的概念及其在方法和类中的应用,以及继承、多态性和接口在面向对象设计中的作用。此外,还讨论了如何通过扩展方法为现有类添加功能。
摘要由CSDN通过智能技术生成

一:三元运算符

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

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

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

如果false则expression2

int x = 5;
int y = 10;
int max = x > y ? x : y;

二:静态

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

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

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

using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour 
{
    //静态变量是在类的所有实例之间
    //共享的变量。
    public static int playerCount = 0;

    void Start()
    {
        //通过递增静态变量了解
         //已创建此类的多少个对象。
        playerCount++;
    }
}

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

using UnityEngine;
using System.Collections;

public class PlayerManager : MonoBehaviour 
{
    void Start()
    {
        //可以使用类名和点运算符
        //来访问静态变量。
        int x = Player.playerCount;
    }
}

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

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

三:方法重构

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

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

using UnityEngine;
using System.Collections;

public class SomeClass
{
    //第一个 Add 方法的签名为
    //“Add(int, int)”。该签名必须具有唯一性。
    public int Add(int num1, int num2)
    {
        return num1 + num2;
    }

    //第二个 Add 方法的签名为
    //“Add(string, string)”。同样,该签名必须具有唯一性。
    public string Add(string str1, string str2)
    {
        return str1 + str2;
    }
}
using UnityEngine;
using System.Collections;

public class SomeOtherClass : MonoBehaviour 
{
    void Start () 
    {
        SomeClass myClass = new SomeClass();

        //具体调用的 Add 方法将取决于
        //传入的参数。
        myClass.Add (1, 2);
        myClass.Add ("Hello ", "World");
    }
}

四:泛型--Generics

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

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

public class SomeClass
{
    //通用方法
    public T GenericMethod<T> (T param)
    {
        return param;
    }

然后就去尝试调用他

//先实例化类
SomeClass myClass = new SomeClass();
//调用方法
int Result = myClass.GenericMethod<int>(5);

string Result = myClass.GenericMethod<string>("hello");
//如果是明显的类型--可以忽略后面的类型
float Result = myClass.GenericMethod(0.5f);

2.聊一下泛型类

using UnityEngine;
using System.Collections;

//这是一个通用类。注意通用类型“T”。
//“T”将被替换为实际类型,同样,
//该类中使用的“T”类型实例也将被替换。
public class GenericClass <T>
{
    T item;

    public void UpdateItem(T newItem)
    {
        item = newItem;
    }
}
using UnityEngine;
using System.Collections;

public class GenericClassExample : MonoBehaviour 
{
    void Start () 
    {        
        //为了创建通用类的对象,必须
        //指定希望该类具有的类型。
        GenericClass<int> myClass = new GenericClass<int>();

        myClass.UpdateItem(5);
    }
}

五:继承

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

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

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

六:多态

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

向下转换可以是

if(起名1 is 子类 )

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

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

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

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

using UnityEngine;
using System.Collections;

//这是只有一个必需方法的基本
//接口。
public interface IKillable
{
    void Kill();
}

//这是一个通用接口,其中 T 是
//将由实现类提供的数据类型的
//占位符。
public interface IDamageable<T>
{
    void Damage(T damageTaken);
}
using UnityEngine;
using System.Collections;

public class Avatar : MonoBehaviour, IKillable, IDamageable<float>
{
    //IKillable 接口的必需方法
    public void Kill()
    {
        //执行一些有趣操作
    }

    //IDamageable 接口的必需方法
    public void Damage(float damageTaken)
    {
        //执行一些有趣操作
    }
}

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

using UnityEngine;
using System.Collections;

//创建一个包含所有扩展方法的类
//是很常见的做法。此类必须是静态类。
public static class ExtensionMethods
{
    //扩展方法即使像普通方法一样使用,
    //也必须声明为静态。请注意,第一个
    //参数具有“this”关键字,后跟一个 Transform
    //变量。此变量表示扩展方法会成为
    //哪个类的一部分。
    public static void ResetTransformation(this Transform trans)
    {
        trans.position = Vector3.zero;
        trans.localRotation = Quaternion.identity;
        trans.localScale = new Vector3(1, 1, 1);
    }
}
using UnityEngine;
using System.Collections;

public class SomeClass : MonoBehaviour 
{
    void Start () {
        //请注意,即使方法声明中
        //有一个参数,也不会将任何参数传递给
        //此扩展方法。调用此方法的
        //Transform 对象会自动作为
        //第一个参数传入。
        transform.ResetTransformation();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值