Fields can't be virtual/overriden, you have only hidden the field. Your code is equivalent to using the 'new' keyword to be more explicit about the hiding:
public class A
{
[MyAttribute1]
public string field;
}
public class B : A
{
[MyAttribute2]
[MyAttribute3]
public new string field;
}
Properties (and methods) can be virtual/overriden:
public class A
{
[MyAttribute1]
public virtual string field { get; set; }
}
public class B : A
{
[MyAttribute2]
[MyAttribute3]
public override string field { get; set; }
}