Structures are typically used for smaller amounts of data and cannot be inherited, abstract, or null. Classes support larger amounts of data and can be inherited, abstract, null, and have destructors. Structures are value types while classes are reference types, and only classes support events that are automatically thread-safe. Fields within structures are not automatically initialized while classes initialize fields to default values.