C#中在 2 个不同的 cs 文件给1 个数组赋值问题,

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);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值