C# 和只读引用类型(例如,数据表)
本文关键字:数据表 例如 只读 引用类型 | 更新日期: 2023-09-27 18:34:54
假设我有以下 C# 类:
class MyClass ()
{
public readonly DataTable dt = new DataTable();
...
}
引用类型的readonly
的含义是什么?我刚刚实现了这段代码,用户能够修改数据表。
如何防止用户写入或更改我的数据表(或任何一般对象(? 即,只是读取访问权限。显然,使用属性在这里无济于事。
只读
意味着你不能重新分配变量 - 例如,以后你不能为dt分配一个新的DataTable。
至于使对象本身只读 - 这完全取决于对象本身。没有使对象不可变的全局约定。
我没有看到任何具体的东西来实现这一点。NET的数据表,但一些选项是
- 确保用户在数据库本身中没有修改权限(最安全(
- 在绑定到它的任何网格/控件上查找 ReadOnly 属性(用户也清楚这是只读的(
你可以创建一个这样的类:
class MyClass
{
private DataTable dt = new DataTable();
public MyClass()
{
//initialize your table
}
//this is an indexer property which make you able to index any object of this class
public object this[int row,int column]
{
get
{
return dt.Rows[row][column];
}
}
/*this won't work (you won't need it anyway)
* public object this[int row][int col]*/
//in case you need to access by the column name
public object this[int row,string columnName]
{
get
{
return dt.Rows[row][columnName];
}
}
}
并像这里这样使用它:
//in the Main method
MyClass e = new MyClass();
Console.WriteLine(e[0, 0]);//I added just one entry in the table
当然,如果你写了这个声明
e[0,0]=2;
它将产生类似于以下内容的错误:属性或索引器 MyNameSpace.MyClass.this[int,int] 不能分配给 --它是只读的。
只读
意味着数据表将是运行时常量,而不是编译时常量