Guest id194 Posted May 24, 2008 at 04:40 PM Report Share #187184 Posted May 24, 2008 at 04:40 PM Estou aqui com um pequeno problema que não faço ideia se é possível ou não fazer, mas algo me diz que não. No entanto, como não sei, mais vale é perguntar... Imaginemos o objecto Form, eu preciso de lhe alterar algumas propriedades para que todos os meus forms (que automaticamente herdam da classe Form) tenham essas propriedades alteradas, ou seja, alterar certas propriedades por omissão. Uma solução seria criar uma classe MyForm (por exemplo) que herdasse da classe Form e depois no construtor de MyForm, alterava as propriedades que queria. De seguida, bastava que todos os meus forms herdassem de MyForm em vez de Form e estava o problema resolvido. Mas isto implica eu ter que alterar a herança automática dos forms de Form para MyForm e eu queria evitar isto. Ou seja, queria que os forms continuassem a herdar de Form mas com certas alterações ás propriedades desta classe. Isto é possível? Como? Desculpem se não me expliquei bem, mas não sei como o fazer melhor... Link to comment Share on other sites More sharing options...
Baderous Posted May 24, 2008 at 05:02 PM Report Share #187194 Posted May 24, 2008 at 05:02 PM Talvez usar variáveis de classe, digo eu. Link to comment Share on other sites More sharing options...
TheDark Posted May 24, 2008 at 05:11 PM Report Share #187202 Posted May 24, 2008 at 05:11 PM Só se alterasses a classe Form no código-fonte da Framework, e voltasses a compilar... 🙂 Outra maneira que não seja a que disseste não conheço. Alguma razão para não quereres derivar Form, além do automatismo? Desaparecido. Link to comment Share on other sites More sharing options...
Guest id194 Posted May 24, 2008 at 05:24 PM Report Share #187207 Posted May 24, 2008 at 05:24 PM Já me disseram no IRC que não é possível fazer exactamente o que quero, alterar as classes base. Mesmo agora que o código da framework anda por ai, mas não tenho interesse nisso. Porque queria evitar ter que alterar a herança de cada form manualmente quando eu faço "Add Form" e ele cria um novo form que herda de Form e assim já estava feito e não precisava de alterar nada... Link to comment Share on other sites More sharing options...
Betovsky Posted May 24, 2008 at 05:32 PM Report Share #187209 Posted May 24, 2008 at 05:32 PM Com disseste, herança é uma hipótese. Outra hipótese é usares "Extension Methods" disponível no C#3.0. Também não é perfeito, apesar de não precisares de alterar a herança automática dos forms, tinhas que por a evocar manualmente o método. Por exemplo, tinhas definido numa classe qualquer o seguinte código. public static MyForm { public static void SetProperties(this Form f) { f.WindowState = FormWindowState.Maximized; f.MaximizeBox = false; f.MinimizeBox = false; } } Depois tens de evocar o método. Poderias acrescentar ao construtor do Form. public partial class Form1 : Form { public Form1() { InitializeComponent(); SetProperties(); } } Ou então acrescentares a quando crias o form. // codigo etc e tal Form1 f = new Form1(); f.SetProperties(); "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk Link to comment Share on other sites More sharing options...
Guest id194 Posted May 24, 2008 at 06:01 PM Report Share #187224 Posted May 24, 2008 at 06:01 PM Isso não vai funcionar para o que eu quero... As mudanças que eu quero fazer precisam de ser visíveis em design-time e com essa tua solução, apenas serão vistas em run-time. Obrigado na mesma a todos, vou optar por herança. Link to comment Share on other sites More sharing options...
DanielAmorim Posted May 24, 2008 at 08:13 PM Report Share #187250 Posted May 24, 2008 at 08:13 PM Outra hipótese é usares "Extension Methods" disponível no C#3.0. Também não é perfeito, apesar de não precisares de alterar a herança automática dos forms, tinhas que por a evocar manualmente o método. Os "Extension Methods" apenas permitem redefinir novas funcionalidades, se criares um método com um nome já existente na classe será sempre invocado o método da classe e nunca o por ti criado. Caso isto não fosse assim era a loucura... Fazer novos métodos para alterar propriedades não tem lógica, pois não se tinha de afectar as propriedades, mas era necessário invocar os métodos. A única forma de fazeres o que queres é usando herança. Daniel Amorim VP for xRTML http://www.xrtml.org http://www.realtime.co Link to comment Share on other sites More sharing options...
Betovsky Posted May 24, 2008 at 11:03 PM Report Share #187279 Posted May 24, 2008 at 11:03 PM Chegaste a ler o que escrevi? Quem falou de criar um método com um nome já existente na classe? "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk Link to comment Share on other sites More sharing options...
DanielAmorim Posted May 24, 2008 at 11:48 PM Report Share #187288 Posted May 24, 2008 at 11:48 PM Claro que vi o que escreveste e também não disse que falaste em criar um método com o nome de um já existente em Form. Talvez se tivesse dito primeiro que na minha opinião não tem lógica criar "Extension Methods" para ter um indirecção e só depois falasse que noutros casos também não resulta devido ao que já referi terias-me entendido melhor. Como fazes estas a adicionar um método para uma dada configuração de Form, imagina que agora cria outra configuração... criava outro método? Para mim não tem muita lógica. Mas bem, esta conversa começa torta à nascença, pois o que o Nazgulled pergunta vai contra a ideia do Object Oriented. Se queremos particularizar uma classe criamos uma classe que implemente esse caso. Daniel Amorim VP for xRTML http://www.xrtml.org http://www.realtime.co Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now