C# - 将类似'.Length'的属性添加到自定义类

时间:2016-05-04 13:34:36

标签: c# list attributes

我正在玩一个充当private List<T>属性的公共接口的类。我注意到List<>类有一个属性Length,它告诉你它包含多少元素。

这是一个你无法改变的属性,并且在intellisense上会出现一个旁边的扳手图像。它不是一种方法,因为在编码名称后不需要()

之前我见过这种类型的属性,但从未在我自己的类中使用它们。有没有人知道如何在我的自定义类中复制Length

谢谢, 标记

6 个答案:

答案 0 :(得分:4)

这是一个没有制定者的财产。如果您要换行List<T>,则只需将其用作自己的计数:

public int Count {get {return _myPrivateList.Count; } }

如果你正在使用C#6,你可以使用它:

public int Count => _myPrivateList.Count;

答案 1 :(得分:1)

如果您目前有一个包含List的类,那么您可以通过公开一个只使用该属性的属性来利用其上已存在的Count属性:

public class YourExampleList<T>
{
     // Example of your inner list
     private List<T> _list { get; set; }
     // Use the Count property to expose a public "Length" equivalent
     public int Length { get { return _list.Count; } }   
}

答案 2 :(得分:1)

这实际上不是一种方法,而是属性。

所以你可以在课堂上定义

private List<string> myList = new List<string>();

public int NumberOfElements
{
    get { return this.myList.Count; }
}

将定义普通属性,例如

public bool ColumnNames { get; set; }

答案 3 :(得分:1)

(exec-sql-file "BR101" 123456)

现在,您可以在自定义类上创建自己的实现。类似的东西:

List<T> myList = new List<T>();

答案 4 :(得分:1)

我必须承认你的问题有点模糊。听起来你想知道如何创建只读属性/属性。这可以通过为类的私有字段成员创建属性包装器来实现,如下所示:

    class MyCustomClass
    {
        private int _length;

        public int Length
        {
            get { return _length; }
        }

    }

答案 5 :(得分:1)

比如说你有一个这样的类:

public class MyClass
{
   private string _str;
   public MyClass()
   {
       _str = "Sample String";
   }

   public int Length
   {
       get
       {
           return _str.Length;
       }
   }
} 

这就是发生的事情:

  • 我们在名为_str的类的开头声明了一个私有字段。
  • 在构造函数中,我们为其赋值"Sample String"
  • 在构造函数之后,我们然后声明类型为Length的公共属性int,并且只给它一个get访问者。与您的示例一样,这只允许读取值,而不是设置。
  • get内我们告诉它返回_str长度的值。

使用与此类似的代码,您可以为任何自定义类实现Length属性。