我是StackOverflow的新手。
我正在开发一个包含自制DLL的C#WinForms项目。我的DLL中有几个变量在我的项目中使用。但是,我希望我的项目可以访问这些变量,但只读。它们只能在内部由DLL修改。
当然,我在这些变量上制作了自定义getter / setter。我的DLL正确生成,我的项目正确编译,但在执行时它会在尝试访问DLL变量时冻结(没有错误消息)。
以下是我的一些代码:
DLL:
-Wall
项目主要表格类:
namespace ProductSelection
{
public class Products{
// First called by ReadFile
public static int Count
{
get
{
return Count;
}
set
{
Count = value;
}
}
// Called by ReadSystemConfiguration
internal static bool ReadFile(string File)
{
try
{
// (..)
//JSON Array read from file
JArray array = (JArray)jsondata["products"];
Count = array.Count;
// (..)
}
catch(){}
}
// Called by project
public static bool ReadSystemConfiguration(string File)
{
try
{
// (..)
ReadFile(string File);
}
catch (){}
}
}
}
没有getter / setter(只是 public static int Count; ),我的代码运行完美,但 Count 可以在我的项目中修改。 我试图将私有集或内部集放入,但没有任何效果。
我怎样才能做到这一点:
using ProductSelection;
namespace MyProject
{
public partial class F_Main : Form
{
// Variables
public static Products F_Products = new Products();
// Constructor
public F_Main()
{
InitializeComponent();
// (..)
Products.ReadSystemConfiguration("File.txt");
}
}
}
但不是这样:
int value = Products.Count;
非常感谢你的帮助!
尼古拉。
答案 0 :(得分:1)
您处于无限循环中,Count
属性访问自身。
创建一个支持字段。
private static int _count;
public static int Count
{
get
{
return _count;
}
set
{
_count = value;
}
}
如果您希望它是只读的,只需删除setter(您的类仍然可以在内部操作_count
)。
private static int _count;
public static int Count
{
get
{
return _count;
}
}
内部/私人套装也可以正常工作。
答案 1 :(得分:0)
你的属性Products.Count
引用自身,它基本上是一个无休止的递归调用。
您必须正常实施该属性,或使用自动属性。
private static int count;
public static int Count
{
get
{
return count;
}
internal set
{
count = value;
}
}
或者:
public static int Count { get; internal set; }
答案 2 :(得分:0)
我试图设置私人套装或内部套装,但没有任何效果。
为什么不呢?你没有告诉我们你的代码。像
这样的东西public static int Count { get; internal set; }
或
public static int Count { get; private set; }
应该有用。