Scusa una domanda, forse non c’entra con l’errore che riscontri …
Certo c’entra con la mia ignoranza su C#.
E’ una curiosita’ sulla sintassi.
Suppongo che SaldoProprieta’ sia un campo privato (il link a GitHub non funziona)
Se il campo e la property (set) hanno lo stesso nome e sono entrambi privati, come fa C# a capire a cosa ti riferisci quando assegni un valore a SaldoProprieta’ ?
Forse C# capisce che il risultato e’ lo stesso e non si preoccupa ?
Non riesco a vedere il codice … github mi da una pagina 404 al tuo link.
Però… vedi qua:
Non è che il problema è che stai usando un metodo “SaldoProprietà” che ha lo stesso identico nome della variabile “SaldoProprietà”?
Su w3schools usano “Name” e “name” … diverse.
La “Encapsulation” serve proprio per non dare accesso diretto a delle variabili, tipo:
class Person {
private int NS;
private int delta=1;
public int NumeroSegreto {
get { return NS+delta; }
set { NS= value-delta; }
}
}
In questo ^ esempio stupido, il numerosegreto è salvato con un valore diverso da quello che l’utente conosce.
Dentro i metodi “get” e “set” puoi fare quello che vuoi, anche lanciare altri metodi che vuoi che vengano eseguiti qualora qualcuno stia cercando di cambiare o leggere quel valore.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp_Test_Eventi
{
// Definizione di un publisher (editore)
public class ContoBancario
{
// Dichiarazione di un delegato per l'evento
public delegate void SaldoInsufficienteHandler(object sender, EventArgs e);
public delegate void PrelevaHandler(object sender, EventArgs e, decimal saldoProprietà, decimal importoProprietà);
// Dichiarazione dell'evento utilizzando il delegato
public event SaldoInsufficienteHandler? SaldoInsufficiente;
public event PrelevaHandler? Preleva;
public decimal importoProprietà
{
get
{
return importoProprietà;
}
set => importoProprietà = value;
}
private decimal saldoProprietà;
public decimal SaldoProprietà
{
get
{
return saldoProprietà;
}
set => saldoProprietà = value;
}
/// <summary>
/// Setta il conto iniziale
/// </summary>
/// <param name="saldoIniziale"></param>
public ContoBancario(decimal saldoIniziale)
{
saldoProprietà = saldoIniziale;
}
Su grasshopper questa parte va in loop e fa crashare Rhino:
public decimal importoProprietà {
get { return importoProprietà; }
set { importoProprietà = value; }
}
Il metodo “importoProprietà” cerca di richiamare un certo “importoProprietà” e dato che non esiste una variabile con quel nome, richiama se stesso, un metodo … e va in loop crash.
Questo invece:
public decimal lol; // manca questa riga!
public decimal importoProprietà {
get { return lol; }
set { lol = value; }
}
Personalmente preferisco usare l’inglese per queste cose, i termini inglesi solitamente sono sempre quelli.
Con le traduzioni non sai mai cosa viene fuori …
Anche se, da quello che hai postato, questi messaggi mi sembrano piuttosto ben tradotti.
Poi, certo, ad esempio per gli eventi, non conoscendoli non riesco a risalire all’origine dell’errore.