受保护的构造函数派生类问题

3

我相信这个问题已经被问过很多次了,但是我遇到了一个问题。所以我创建了一个单独的类,专门用于验证是否存在正确的用户级别。

以下是测试权限级别的代码:

    class Elevated_Rights
    {

        // Token Bool:
        private bool _level = false;

        #region Constructor:

        protected Elevated_Rights()
        {

            // Invoke Method On Creation:
            Elevate();

        }

        #endregion

        public void Elevate()
        {

            // Get Identity:
            WindowsIdentity user = WindowsIdentity.GetCurrent();

            // Set Principal
            WindowsPrincipal role = new WindowsPrincipal(user);

            #region Test Operating System for UAC:

            if (Environment.OSVersion.Platform != PlatformID.Win32NT || Environment.OSVersion.Version.Major < 6)
            {

                // False:
                _level = false;

                // Todo: Exception/ Exception Log

            }

            #endregion

            else
            {

                #region Test Identity Not Null:

                if (user == null)
                {

                    // False:
                    _level = false;

                    // Todo: "Exception Log / Exception"

                }

                #endregion

                else
                {

                    #region Ensure Security Role:

                    if (!(role.IsInRole(WindowsBuiltInRole.Administrator)))
                    {

                        // False:
                        _level = false;

                        // Todo: "Exception Log / Exception"

                    }

                    else
                    {

                        // True:
                        _level = true;

                    }

                    #endregion


                } // Nested Else 'Close'

            } // Initial Else 'Close'

        } // End of Class.

    }

所以那部分按预期工作;但是当我将这个类继承到另一个类中使用受保护的构造函数时,我遇到了一个问题。

    class Default_Configuration : Elevated_Rights
    {

        #region Constructor:

        public Default_Configuration() : base()
        {


            Elevate();


        }

        #endregion



    }

但是当我调用这个新类时,方法会显示:“由于构造函数权限而导致无效访问”。理论上应该可以工作;我是否漏掉了什么?任何帮助将不胜感激。


3
你明白当前写法会导致 Elevate() 被调用两次了吗? - Bobson
你能发布调用代码吗? - Willem D'Haeseleer
虽然我不认识那个错误,但类(除了嵌套类)默认为“internal”,因此,除非您在同一程序集中使用该类,否则公共构造函数是无意义的。 - D Stanley
请仔细检查您的错误信息,短语“由于构造函数权限无效访问”除了这个问题外在谷歌上没有出现过,所以我怀疑您没有准确地复制和粘贴它。 - Carson63000
谢谢Bobson,我甚至没有意识到这一点。 - Greg
显示剩余2条评论
2个回答

2
我认为你的问题在其他地方:我将这两个类定义粘贴到一个项目中,可以成功构建。实例化一个新的Default_Configuration,调用Elevate(),没有错误。
如果您在混合publicprotected方法方面有其他问题,这里是Peter Hallam的一篇博客文章,描述了这些问题。
基本上,您不能从派生类的public实例方法中调用基类中的protected实例方法;这样做会允许“恶意”派生类通过编写包装器使所有基类中的protected方法变为public

这也适用于构造函数吗?我认为公共构造函数可以调用基类受保护的构造函数。 - Bobson
是的,我也很好奇。感谢您的帖子。 - Greg
@Bobson:当我从这个问题中复制代码时,调用公共构造函数调用基础受保护的构造函数对我很有效。 - Carson63000
了解这点很好 - 我想它会起作用,但得到确认总是好的。 - Bobson
是的,我的问题在应用程序的其他地方。但是感谢大家的反馈。帮助我确保我的理智没有丧失。 - Greg

0
        new Default_Configuration().Elevate();

这行代码对我有效。

你遇到了什么问题?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接