V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qW7bo2FbzbC0
V2EX  ›  C#

请教 MongoDB 驱动中的一段继承代码含义

  •  
  •   qW7bo2FbzbC0 · 2020-09-11 17:35:32 +08:00 · 3978 次点击
    这是一个创建于 1295 天前的主题,其中的信息可能已经有所发展或是发生改变。
    using MongoDB.Driver;
    using System;
    
    /// <summary>
    /// The result of a delete operation.
    /// </summary>
    public abstract class DeleteResult
    {
    	/// <summary>
    	/// The result of an acknowledged delete operation.
    	/// </summary>
    	public class Acknowledged : DeleteResult
    	{
    		private readonly long _deletedCount;
    
    		/// <inheritdoc />
    		public override long DeletedCount => _deletedCount;
    
    		/// <inheritdoc />
    		public override bool IsAcknowledged => true;
    
    		/// <summary>
    		/// Initializes a new instance of the <see cref="T:MongoDB.Driver.DeleteResult.Acknowledged" /> class.
    		/// </summary>
    		/// <param name="deletedCount">The deleted count.</param>
    		public Acknowledged (long deletedCount);
    	}
    
    	/// <summary>
    	/// The result of an unacknowledged delete operation.
    	/// </summary>
    	public class Unacknowledged : DeleteResult
    	{
    		private static Unacknowledged __instance = new Unacknowledged ();
    
    		/// <summary>
    		/// Gets the instance.
    		/// </summary>
    		public static Unacknowledged Instance => __instance;
    
    		/// <inheritdoc />
    		public override long DeletedCount {
    			get;
    		}
    
    		/// <inheritdoc />
    		public override bool IsAcknowledged => false;
    
    		private Unacknowledged ();
    	}
    
    	/// <summary>
    	/// Gets the deleted count. If IsAcknowledged is false, this will throw an exception.
    	/// </summary>
    	public abstract long DeletedCount {
    		get;
    	}
    
    	/// <summary>
    	/// Gets a value indicating whether the result is acknowledged.
    	/// </summary>
    	public abstract bool IsAcknowledged {
    		get;
    	}
    
    	internal static DeleteResult FromCore (BulkWriteResult result);
    }
    
    

    上面的 Acknowleged 继承于 DeleteResult 可以是为啥要写到 DeleteResult 之中?岂不是造成循环了?

    3 条回复    2020-09-14 10:26:37 +08:00
    kkkkkrua
        1
    kkkkkrua  
       2020-09-11 18:15:55 +08:00
    类中类,那个代码的意思是,对于 DeleteResult 默认的 2 个实现,用的话可以直接用他声明好的,如果不满足需求,自己另外实现这个抽象类
    forgottencoast
        2
    forgottencoast  
       2020-09-12 18:16:35 +08:00
    写在里面是因为作者认为大多数时候不需要关心具体的实现类,只用抽象类 DeleteResult 就可以了。
    没有循环这个说法,这种是内部类,大部分时候等同于命名空间的作用,除了可以访问一些类内部的成员。
    qW7bo2FbzbC0
        3
    qW7bo2FbzbC0  
    OP
       2020-09-14 10:26:37 +08:00
    @kkkkkrua #1
    @forgottencoast #2

    感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2452 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:54 · PVG 23:54 · LAX 08:54 · JFK 11:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.