What is allowed in Visual Basic that's prohibited in C# (or vice versa)?

后端 未结 21 1871
渐次进展
渐次进展 2020-12-05 06:07

This is code-related as in what the compiler will allow you to do in one language, but not allow you to do in another language (e.g. optional parameters in

21条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-05 06:29

    VB and C# have different interpretations of what "protected" means.

    Here's an explanation copied below:

    The default constructor for WebControl is protected.

    VB and C# have different interpretations of what "protected" means.

    In VB, you can access a protected member of a class from any method in any type that derives from the class.

    That is, VB allows this code to compile:

    class Base
        protected m_x as integer
    end class
    
    class Derived1
        inherits Base
        public sub Foo(other as Base)
            other.m_x = 2
        end sub
    end class
    
    class Derived2
        inherits Base
    end class
    

    Because a "Derived1" is a base, it can access protected members of "other", which is also a base.

    C# takes a different point of view. It doesn't allow the "sideways" access that VB does. It says that access to protected members can be made via "this" or any object of the same type as the class that contains the method.

    Because "Foo" here is defined in "Derived1", C# will only allows "Foo" to access "Base" members from a "Derived1" instance. It's possible for "other" to be something that is not a "Derived1" (it could, for example, be a "Derived2"), and so it does not allow access to "m_x".

提交回复
热议问题