Neither. Interface is a contract.
It can be used on either ref or value types.
For example,
public struct CustomIntCollectionValueType : ICollection<int>
{
}
</int>
or
public class CustomIntCollectionRefType : ICollection<int>
{
}
</int>
In this case I am using a system provided interface. One can create their own interface and implement it upon a value type (struct) or ref type (class).