C#DLL中的辅助功能级别

时间:2017-12-29 14:01:47

标签: c# winforms dll visual-studio-2015

我是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;

非常感谢你的帮助!

尼古拉。

3 个答案:

答案 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; }

应该有用。