Yes, in an inheritance situation whenever a virtual or abstract class member was allowed to be directly accessed by other classes inside the same assembly (internal) in a "friendly"/trusted manner, but also that member could be overriden by derived classes in external assemblies (via protected).
This combo modifier allows the assembly to fully trust its own contents and internal usage (which is not abnormal), while exposing some of those members to the normal inheritance derivation model for other assemblies.
No single modifier can do this.
Or consider the reverse situations:
Assembly1.dll
// ------ Assembly file 1 .dll --------
// Allow my friends (internal) and derived classes (protected) to do this.
public class A {
internal protected virtual void YoBusiness() {
//do something
}
}
class B { // not a derived class - just composites an instance of A
public B() {
A a = new A();
a.YoBusiness(); // Thanks friend for the access!
}
}
Assembly2.dll
// ------ Assembly file 2 .dll --------
class C : A { // derived across assemblies
protected override void YoBusiness() {
// Hey thanks other guy, I can provide a new implementation.
}
}