Maybe you can do something like this:
interface IReadonlyRefType
{
public string Name { get; }
}
class RefType : IReadonlyRefType
{
public string Name { get; set; }
}
static void Test1( RefType rt )
{
rt.Name = "name changed"; // OK
}
static void Test2( IReadonlyRefType rt )
{
string n = rt.Name; // OK
//rt.Name = "name changed"; // Error
}
// Usage:
RefType refType = new();
refType.Name = "Original name ";
Test1(refType);
Test2(refType);