Public:
public is an access modifier for types and type members. This is the most permissive access level as there are no restrictions on accessing a public type or type member.
protected:
protected is an access modifier for type members only. A protected member is only accessible within the body of the containing type and from within any classes derived from the containing type