Difference between VB.Net and C# “As New WebControl”

后端 未结 4 438
情深已故
情深已故 2021-01-15 06:02

I was refactoring some code, and part of it included moving it from VB.Net to C#.

The old code declared a member like this:

Protected viewMode As New         


        
4条回答
  •  旧时难觅i
    2021-01-15 06:12

    The reason this worked in VB, and not in C#, had nothing to do with assemblies.

    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".

    In this case of your code, VB allowed "sideways" access to the "WebControl" constructor.

    C#, however, did not.

提交回复
热议问题