zoukankan      html  css  js  c++  java
  • 20、异常和状态管理

    namespace CLR_Via
    {
        class Class4
        {
            static void Main()
            {
                DiskFullException.TestException();
                Console.ReadKey();
            }
        }
        [Serializable]
        public sealed class DiskFullException : ExceptionArgs
        {
            private readonly string m_diskPath;
    
            public DiskFullException(string diskPath)
            {
                this.m_diskPath = diskPath;
            }
    
            public string DiskPath { get { return m_diskPath; } }
    
            public override string Message
            {
                get
                {
                    return m_diskPath == null ? base.Message : "DiskPath = " + m_diskPath;
                }
            }
    
            public static void TestException()
            {
                try
                {
                    throw new Exception<DiskFullException>(new DiskFullException(@"C:"), "this disk is full");
                }
                catch (Exception<DiskFullException> ex)
                {
                    Console.WriteLine(ex.Message);
                    throw;
                }
            }
        }
        public sealed class Exception<TExceptionArgs> : Exception, ISerializable where TExceptionArgs : ExceptionArgs
        {
            private const string c_args = "Args";
            private readonly TExceptionArgs m_args;
    
            public TExceptionArgs Args { get { return m_args; } }
    
            public Exception(string message = null, Exception innerException = null) : this(null, message, innerException)
            {
    
            }
    
            public Exception(TExceptionArgs args, string message = null, Exception innerException = null) : base(message, innerException)
            {
                m_args = args;
            }
    
            [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
            private Exception(SerializationInfo info, StreamingContext context) : base(info, context)
            {
                m_args = (TExceptionArgs)info.GetValue(c_args, typeof(TExceptionArgs));
            }
    
            [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
            public override void GetObjectData(SerializationInfo info, StreamingContext context)
            {
                info.AddValue(c_args, m_args);
                base.GetObjectData(info, context);
            }
    
            public override string Message
            {
                get
                {
                    string baseMsg = base.Message;
                    return (m_args == null) ? baseMsg : string.Format("{0} {1} ", baseMsg, m_args.Message);
                }
            }
    
            public override bool Equals(object obj)
            {
                Exception<TExceptionArgs> other = obj as Exception<TExceptionArgs>;
                if (other == null)
                    return false;
                return object.Equals(m_args, other.m_args) && base.Equals(obj);
            }
    
            public override int GetHashCode()
            {
                return base.GetHashCode();
            }
        }
        [Serializable]
        public abstract class ExceptionArgs
        {
            public virtual string Message { get { return string.Empty; } }
        }
    }
    

      

  • 相关阅读:
    Shell bash脚本查询Mysql并简单处理查询结果
    Caused by: java.lang.ClassNotFoundException: org.apache.flink.streaming.api.scala.StreamExecutionEnv
    Flink的部署方式
    Flink线上环境搭建
    数仓及数据治理相关
    Hive动态分区详解及注意的问题
    lateral view explode行转列的简单使用
    MachineLearning
    Linux 查看CPU信息,机器型号,内存等信息
    redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect time out
  • 原文地址:https://www.cnblogs.com/kikyoqiang/p/9886502.html
Copyright © 2011-2022 走看看