20异常和状态管理

Posted kikyoqiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; } }
    }
}

  

以上是关于20异常和状态管理的主要内容,如果未能解决你的问题,请参考以下文章

20异常和状态管理

关闭从另一个对话框片段启动的对话框片段会导致非法状态异常

使用片段中的处理程序时出现非法状态异常

异常和状态管理1

在 fragmenStatePagerAdapter 的嵌套片段中,非法状态异常-指定的子级已经有父级

异常和状态管理