« 包含标签 C# 的文章

how to create instance in Unity

#1 Create Class Car.

using UnityEngine;
using System.Collections;
 
public class Car : ScriptableObject {
	public string color;
 
	void Awake(){
		color = "red";
	}
}

#2 Create instance.

using UnityEngine;
using System.Collections;
 
public class main : MonoBehaviour {
	void Start(){
		Car polo = (Car) ScriptableObject.CreateInstance(typeof(Car));
	}
}

[转]C# 中 List 用法

List 类是 ArrayList 类的泛型等效类,某些情况下,用它比用数组和 ArrayList 都方便。
我们假设有一组数据,其中每一项数据都是一个结构。

public struct Item
{
    public int Id;
    public string DisplayText;
}

注意结构是不能给实例字段赋值的,即 public int Id = 1 是错误的。

using System.Collections.Generic;
 
List<Item> items = new List<Item>();
 
//添加
Item item1 = new Item();
item1.Id = 0;
item1.DisplayText = "水星";
items.Add(item1);
 
//添加
Item item2 = new Item();
item2.Id = 1;
item2.DisplayText = "地球";
items.Add(item2);
 
//修改
//这里使用的是结构,故不能直接用 items[1].DisplayText = "金星";
//如果 Item 是类,则可以直接用。为什么呢?因为结构是按值传递的。
Item item = items[1];
item.DisplayText = "金星";
items[1] = item;

[转]C# []、List、Array、ArrayList 区别及应用

作者:vkvi 来源:千一网络(原创)

[] 是针对特定类型、固定长度的。
List 是针对特定类型、任意长度的。
Array 是针对任意类型、固定长度的。
ArrayList 是针对任意类型、任意长度的。
Array 和 ArrayList 是通过存储 object 实现任意类型的,所以使用时要转换。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // System.Int32 是结构
        int[] arr = new int[] { 1, 2, 3 };
        Response.Write(arr[0]); // 1
        Change(arr);
        Response.Write(arr[0]); // 2
 
        // List 的命名空间是 System.Collections.Generic
        List<int> list = new List<int>();
        list.Add(1);
        list.Add(2);
        list.Add(3);
        Response.Write(list[0]); // 1
        Change(list);
        Response.Write(list[0]); // 2
 
        // Array 的命名空间是 System
        Array array = Array.CreateInstance(System.Type.GetType("System.Int32"), 3); // Array 是抽象类,不能使用 new Array 创建。
        array.SetValue(1, 0);
        array.SetValue(2, 1);
        array.SetValue(3, 2);
        Response.Write(array.GetValue(0)); // 1
        Change(array);
        Response.Write(array.GetValue(0)); // 2
 
        // ArrayList 的命名空间是 System.Collections
        ArrayList arrayList = new ArrayList(3);
        arrayList.Add(1);
        arrayList.Add(2);
        arrayList.Add(3);
        Response.Write(arrayList[0]); // 1
        Change(arrayList);
        Response.Write(arrayList[0]); // 2
    }
 
    private void Change(int[] arr)
    {
        for (int i = 0; i < arr.Length; i++)
        {
            arr[i] *= 2;
        }
    }
 
    private void Change(List<int> list)
    {
        for (int i = 0; i < list.Count; i++) // 使用 Count
        {
            list[i] *= 2;
        }
    }
 
 
    private void Change(Array array)
    {
        for (int i = 0; i < array.Length; i++) // 使用 Length
        {
            array.SetValue((int)array.GetValue(i) * 2, i); // 需要类型转换
        }
    }
 
    private void Change(ArrayList arrayList)
    {
        for (int i = 0; i < arrayList.Count; i++) // 使用 Count
        {
            arrayList[i] = (int)arrayList[i] * 2; // 需要类型转换
        }
    }
}

example of virtual function in unity3d with C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using UnityEngine;
using System.Collections;
using System;
 
public class car : MonoBehaviour {
    private A a;
    private A b;
    private A c;
    private A d;
    private D e;
    private C f;
 
    void Start () {
        a = new A(); 
        b = new B(); 
        c = new C(); 
        d = new D();
        e = new D();
        f = new C();
 
        a.Func(); // print A
        b.Func(); // print B:A
        c.Func(); // print B:A  
        d.Func(); // print A
        e.Func(); // print D:A
        f.Func(); // print B:A
    }
 
 
    public class A {
    	public virtual void Func() 
        {
            Debug.Log("A");
        }
    }
 
    public class B : A  
    { 
        public override void Func()
        { 
            Debug.Log("B : A");
        }
    }
 
    public class C : B 
    {
 
    }
 
    public class D : A 
    {
        public new void Func()
        {
            Debug.Log("D : A");
        }
    }
 
}

[Repaste] C#中override重写与new隐藏的区别

在C#中: override重写,是指对父类中的虚方法(标记为override)或抽象方法(标记为abstract)进行重写,实现新的功能,它必须与父类方法的签名完全一致,而且与父类方法的可访问性也必须一致

new方法隐藏,是指在子类中重新定义一个签名与父类的方法相同的方法,这个方法可以不用new修饰,只是编译时会弹出一个警告信息:如果是有意隐藏,请使用关键字 new。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
public class Test 
{
    public static void Main(String[] args){
        A a=new B(); 
        Console.Write(a.getVal()); // 输出:A 虽然实例是B,但是执行的却是A的方法
 
        a=new C(); 
        Console.Write(a.getVal()); // 输出:C 实例是C,而且C重写的A的方法,所以执行C的方法
 
        B b=new B(); 
        Console.Write(b.getVal()); // 输出:B 只有定义和实例都是B,才执行B的方法
    } 
}
 
class A
{
    // 要允许子类重写,方法必须标识为virtual 或 abstract
    public virtual String getVal(){ 
        return "A"; 
    } 
} 
 
class B : A
{
    // 隐藏父类方法 用new标识,不标识时会出现编译警告,不影响使用
    public new String getVal(){ 
        return "B"; 
    } 
} 
 
class C : A
{
    // 重写方法 必须用override标识
    public override String getVal(){ 
        return "C"; 
    } 
}

Author : youbl