标记为“内部使用”的属性

时间:2017-03-17 01:14:26

标签: c#

我创建了一个需要公共默认构造函数的类,但是 永远不会被称为;而是在DataGrid.AddingNewItem使用另一个构造函数。

我想告诉开发人员默认构造函数不适合他们使用。 是否有适合此目的的属性?

我使用MethodImplAttributes.InternalCall检查了DebuggerNonUserCode和MethodImplAttribute,但不确定这是否正确。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        this.dataGrid1.CanUserAddRows = true;
        var list = new List<RowX>();
        this.dataGrid1.ItemsSource = CollectionViewSource.GetDefaultView(list);
        this.dataGrid1.AddingNewItem += (s, e) => e.NewItem = new RowX("ABC");
    }
}

public class RowX
{
    public RowX()
    {
        //this is not used. but CollectionView require this to be public or 
        //CanUserAddRows doesn't work.
    }

    public RowX(object o)
    {
        //this is the actual ctor.
    }

    public string Text { get; set; }
}

2 个答案:

答案 0 :(得分:1)

标记private

class Foo
{ 
    private Foo() {}
}

答案 1 :(得分:0)

您可以为构造函数指定access modifier

  • private这意味着它只能从该类中的另一个构造函数调用。

    public class PrivateClass
    {
        //Only from inside this class:
        private PrivateClass()
        {
        }
    
        public static PrivateClass GetPrivateClass()
        {
            //This calls the private constructor so you can control exactly what happens
            return new PrivateClass();
        }
    
    }
    
  • internal这意味着只有同一个程序集中的代码(即来自库内部的代码)才能访问它。

    public class InternalClass
    {        
        //Only from within the same assembly
        internal InternalClass(string foo)
        {
        }
    }