Como ter acesso a membros de instâncias em um método estático?
Eu estou tentando criar classes para encapsular validação e lógica para objetos como e-mail, URL, número de telefone e assim por diante. na primeira tentativa eu descobri que estou repetindo o mesmo código em todas as classesIsValid
e aConstructor
. então decidi criar uma classe base para colocar todos os mesmos códigos nela. então há umclasse base que outras classes herdam isso. Estáabstrato como eunão faça quer que seja usadodiretamente .
public abstract class BaseClass
{
protected string value;
private bool isValid;
public bool IsValid{get { return this.isValid;}}
protected virtual string RegexPattern{get;}
protected virtual RegexOptions RegexOption{get;}
private BaseClase(){}
protected BaseClass(string value)
{
this.isValid = Validator.IsValid(value , RegexPattern, RegexOption);
this.value = this.isValid ? value : string.Empty;
}
public static bool Validate(string value)
{
return Validator.IsValid(value ,RegexPattern, RegexOption); // rror
}
}
public class Email
{
private override string RegexPattern
{
get
{
return ".*";
}
}
private override RegexOptions RegexOption
{
get
{
return RegexOptions.SingleLine;
}
}
public string Address{get {return this.value; }}
public Email(string address) : base(address){}
}
o problema é com a estáticaIsValid
método de BaseClass. no código atual, ele gera erros comoRegexPattern
eRegexOption
são membros da instância. Eu não quero definir o mesmo valor duas vezes por exemplo e métodos estáticos. funciona se eu usar
const string RegexPattern= ".*";
const RegexOptions RegexOption =RegexOptions.SingleLine;
mas eu preciso ser capaz de substituir esses valores em subclasses, então isso não é aplicável. e como eu defini oBaseClass
Comoabstract
Eu não consigo instanciá-lo dentro do método estático para ter acesso às propriedades.
e como eu quero usar o método estático comoEmail.IsValid("[email protected]");
, Eu não sei como passar um exemplo através dele.
então, como posso ter acesso aRegexOption
eRegexPattern
neste método estático?