加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么在创建部分关系时使用嵌套类型(组合)

发布时间:2020-12-15 22:26:20 所属栏目:百科 来源:网络整理
导读:在创建部分关系时使用嵌套类型(而不是使用该类类型的变量/字段数据)的好处是什么(示例引擎是Car的一部分) 换句话说,以下是有什么区别的: (1) public class Engine{//some attributes like engine type and constructor . . . }public class Car{ Engine e;
在创建部分关系时使用嵌套类型(而不是使用该类类型的变量/字段数据)的好处是什么(示例引擎是Car的一部分)
换句话说,以下是有什么区别的:
(1)

public class Engine
{
//some attributes like engine type and constructor
 . . . 
}
public class Car
{
    Engine e;
    Public Car(string type)
      {
          e = new Engine(type);
      }
    .......
}

(2)

public class Car
{
   public class Engine
    {
       . . . 
    }
}

然后你可以做类似的事情

Car.Engine e;
e = new Car.Engine();
e.type = something;

解决方法

我想说嵌套类型的使用是为了组织和特异性.在您的示例中,嵌套类的问题在于引擎是所有类型车辆的必要对象,因此将其嵌套在特定车辆中并不是很有意义.

你可以说也许使用名称空间仍然会更好;毕竟,如果你将Engine类放在命名空间CarsAreCool.Car中,你仍然可以通过Car.Engine引用该对象,但这与Car类的引擎类型的暴露属性没有什么不同.

所以这是我认为有用的地方:

假设我们有一个界面IVehicle,我们所有的车辆都实施,以及与车辆相关的其他一般类别.

public interface IVehicle 
{
    public Engine Engine;
    public int PassengerCapacity;
    public int NumberOfWheels;
}

汽车,卡车,货车,摩托车等都会实现这一点,因为它是一种车辆.现在以摩托车类为例.头盔是摩托车特有的东西,它们本身也有一些属性,所以有一个属性HelmetColor,HelmetSize,HelmetVisorType关闭摩托车会不会有点麻烦?将这些作为Helmet类的属性显然是有意义的.因此,您可以嵌套该类,这样只有在谈到摩托车时才能访问它,并且它允许您以更清晰的方式组织属性.

public class Motorcycle : IVehicle
{
    #region IVehicle implementation 

    #endregion

    #region Nested Types

    public sealed class Helmet
    {
        public string Color;
        public string Size;
        public string VisorType;
        public bool RequiredByLaw;
    }

    public Helmet Helmet;
    public decimal Mileage;

    #endregion
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读