a.cs
private byte[][] data1 = new byte[2][15];
private int id = 0;
b.cs
byte[] data2 = new byte[12];
当我
Buffer.BlockCopy(data2, 0, data1[id], 0, data2.Length);
提示
不认识 data1 和 id
因为
data1 和 id 在 a.cs 文件里
是私有成员
我应该在
a.cs
怎么写个函数
可以代替 data1 和 id
比如
id
public int readid()
{
return id;
}
那么
data1 呢?
要怎么写?
b文件中,写一个方法,参数是data1和id不就行了。
改成public不能解决问题吗?
如果你觉得public不安全的话,就在a.cs的类中提供一个public的方法来返回data1
是在一个命名空间的话
a.cs
private static byte[][] data1 = new byte[2][] { new byte[] { 3,96,0,2 }, new byte[] { 6 } };
private static int id = 0;
public static byte[][] getdata1()
{
return data1;
}
public static int getid()
{
return id;
}
b.cs
byte[][] data2 = Class1.getdata1();
int id2 = Class1.getid();
又或者
public class a
{
private byte[][] data1 = new byte[2][];
private int id = 0;
public byte[][] Data1
{
get
{
return data1;
}
set
{
data1 = value;
}
}
public int Id
{
get { return id; }
set { id = value; }
}
public byte[] GetData1()
{
return data1[id];
}
}
public class b
{
byte[] data2 = new byte[12];
private byte[][] data1 = new byte[2][];
public void aaaa()
{
a a1 = new a();
//1
Buffer.BlockCopy(data2, 0, a1.Data1[a1.Id], 0, data2.Length);
//2
Buffer.BlockCopy(data2, 0, a1.GetData1(), 0, data2.Length);
}
}
我感觉是不是之前做的c语言开发,面向过程的思想很深呀?
在c#里,文件只是代码的物理组织,和之后的编译执行几乎没有关系。它有自己的逻辑组织关系,最外层是命名空间,命名空间下有类型(包括 类、结构、接 口、枚举、委托),类型可以一个物理文件一个一个,也可以同一个物理文件定义多个,也可以一个通过关键字partial在不同的文件里定义一个。类型里面 有成员(就是 函数 和变量)。这些类型和成员都有小蜜蜂论坛发帖机范围的关键字public 、private等,用来约束另外一个类型的成员的访问资格。
public class a
{
public static a m_instance = null;
byte[][] m_data1 = new byte[2][];
int m_id = 0;
public a()
{
;
}
public static a Create()
{
if (m_instance == null)
{
m_instance = new a();
}
return m_instance;
}
public void initdata1()
{
for(int i = 0; i < 2; i ++)
{
m_data1[i] = new byte[10];
}
}
public int readid()
{
return m_id;
}
public byte[] getdata1(int id)
{
return m_data1[id];
}
}
b.cs
public class b : MonoBehaviour {
public static b Single = null;
public GameObject m_b = null;
void Start()
{
a.Create().initdata1();
}
void Update ()
{
if (Input.GetKeyDown(KeyCode.A))
{
byte[] data2 ={0x15,0x16,0x17};
Buffer.BlockCopy(data2, 0, a.Create().getdata1(a.Create().readid()), 0, data2.Length);
}
}
}
Buffer.BlockCopy(data2, 0, a.Create().getdata1(a.Create().readid()), 0, data2.Length);