使用具有不同名称的系统类?

时间:2015-07-12 07:40:42

标签: c# naming renaming

我需要一种方法来跟踪网格中的行数和列数。如果我使用System.Point,我总是会忘记" x"是行数或列数。所以我有下面的课程。

但是我想知道是否有办法使用System.Point,使用不同的命名皮肤?换句话说,我想要定义一般" NRows"或" NColumns" System.Point上的方法。但我确实希望能够返回一个代码将被视为" NRowsColumns"对象,但实际上编译为System.Point。访问" NRowsColumns"对象,我们使用字段" NRows"和" NColumns"而不是" x"和" y"。但在引擎盖下,它实际上编译为System.Point。

理想情况下,此定义不限于单个文件。

public class NRowsColumns
{
  public int NRows {get;set;}
  public int NColumns {get;set;}
  public NRowsColumns(int nRows, int nColumns)
  {
    this.NRows = nRows;
    this.NColumns = nColumns;
  }
}

3 个答案:

答案 0 :(得分:3)

不,你不能“重命名”这样的成员。如果您真的需要,可以将System.Point称为NRowsColumns

using NRowsColumns = System.Point;

...但它仍然与System.Point具有相同的成员。

通过撰写 NRowsColumns来实现System.Point会更简单:

public class NRowsColumns
{
    private Point point;

    public int NRows
    {
        get { ... } // Code using point
        set { ... } // Code using point
    }

    ...
}

说完了:

  • 我看不出Point与多个行和列有任何关系。为什么不只有两个整数?
  • 我会在这里重新审视你的命名... N前缀是非常规的。我可能会将GridSize称为RowsColumns - 尽管通常情况下,这似乎也不必作为单独的类型。 (为什么您的网格本身不会通过RowsColumns属性公开其大小?)

答案 1 :(得分:1)

您可以使用conversion operators让代码可以互换地使用NRowsColumnsPoint

注意,这不是一个完美的解决方案。来回创建对象会产生影响,您应该进行调查。

implicit operator次转化添加到现有类:

public class NRowsColumns
{
    public int NRows { get; set; }
    public int NColumns { get; set; }
    public NRowsColumns(int nRows, int nColumns)
    {
        this.NRows = nRows;
        this.NColumns = nColumns;
    }

    public static implicit operator NRowsColumns(Point p)
    {
        return new NRowsColumns(p.X, p.Y);
    }

    public static implicit operator Point(NRowsColumns rowsColumns)
    {
        return new Point(rowsColumns.NRows, rowsColumns.NColumns);
    }
}

现在你可以来回转换:

Point point1 = new Point(5, 10);
NRowsColumns nRowsColumns = point1;
Point point2 = nRowsColumns;

请记住,每次“转化”都是一个新对象。

答案 2 :(得分:0)

为什么不直接从Point继承?

public struct  NRowsColumns: Point
{
   public int NRows {get {return base.x;}}
   public int NColumns {get {return base.y;}}
   public NRowsColumns(int nRows, int nColumns) 
      : base(nRows, nColumns)
   {
   }
}