Classes and structs in C# share several characteristics:
- they can be instantiated (absent restrictions to the contrary, as with abstract and static classes)
- they can contain method and property implementations
- the type’s author defines the type’s instance fields
We often use “class” and “struct” to distinguish between “reference type” and “value type”, but sometimes it’s useful to consider both types of types. Furthermore, “reference type” also includes interfaces and delegates, which are not classes. So “class” doesn’t mean any reference type, it means “a reference _(fill in the blank)_“.
For example, if reference and value type declarations were like this:
public sealed class ref String { }
public class val Int32 { }
instead of like this:
public sealed class String { }
public struct Int32 { }
then the word “class” could be used to denote the concept.
The best answer I’ve come up with here is “concrete type”, but that would be confusing, since it could also refer to the non-abstract subclass of an abstract class.
Any suggestions?
EDIT
To clarify, I’m not seeking a word that can collectively describe instances of classes and structs. I’m trying to describe class types and struct types.
In other words, if “class” denotes a set that includes System.String, System.FileInfo, etc., and “struct” denotes a set that includes System.Int32, System.Collections.Generic.List<T>.Enumerator, etc., then I’m looking for the word that denotes the union of those sets.
EDIT 2
(In reaction to Jordão’s answer) Another way to answer this question would be to complete the following sentence: “All C# method implementations must be declared as members of a _(fill in the blank)_“.
I find this to be a pseudo discussion. Point #3 can be said about enums and interfaces too, and the point about subclasses of abstract classes not fitting into the mix, I simply don’t get. I think your own suggestion of “concrete types” is ok, but maybe you just want to talk about them as classes and structs, oh wait, but with the exception of subclasses of abstract classes and classes that implement interfaces. The reason that there is no term for what you are looking for might be that it is not a very useful concept in its own right.
EDIT:
All C# method implementations must be declared as members of a class or struct.