Stále nemôžem celkom povedať, čo sa snažíte urobiť. Ale budem robiť moje najlepšie, ktoré vám ukázať niektoré veci.
Beriem to veta, ktorú napísal: "koniec účely tohto je vysvetliť tento slovník a umožňujú rôzne spôsoby priamo na čítanie a zápis z/na to." ako môj sprievodca
Čiastočné Triedy Problémy,
Ako som už spomenul v komentároch: nie je tam žiadna taká vec ako Čiastočné Triedy. Čiastočné kľúčové slovo jednoducho znamená, že trieda môže byť definované vo viac ako jeden súbor. Definícia pravidiel pre triedu zostávajú rovnaké, je to len, že niektoré triedy členovia môžu byť definované v jednom súbore a ostatné diely v ďalších súborov.
Problémy sú s tu mať nič do činenia s partial
kľúčové slovo.
Vaše Dve // Toto nefunguje Poznámky
Prvý z nich vyzerá takto:
partial class ClassA
{
ExampleDictionary instanceOfDict = new ExampleDictionary();
instanceOfDict.Add(1, "Test1"); // This does not work
//other code
}
Prvý riadok vyhlasuje, súkromné členských oblasti ClassA
s názvom instanceOfDict
a inicializuje ju. To je dôvod, prečo zostavuje.
Druhý riadok sa snaží dať runnable kód (volanie funkcie) priamo v top-level rozsahu triedy. Môžete to urobiť, že. Môžete dať veľa vecí na najvyššej úrovni v rámci triedy (napr., pole, vlastnosti, metódy, delegátov, výpočty, vnútorné triedy), ale nemôžeš dať kód tam.
Vaša druhá otázka vyzerá takto:
public static void FunctionA()
{
for (int i = 0; i < 10; i++)
{
string text = $"Test{i}";
instanceOfDict.Add(i, text); // This does not work as well
}
}
Barcelony je static
metódy. instanceOfDict
je súkromná oblasti triedy, ktoré nie sú vyhlásené za ako statické. Nemôžete odkazovať na stupni stupni-na úrovni členov (metódy, vlastnosti, polia, ...) zo statickej metódy. Prečítajte si na static
kľúčové slovo.
Vytvorenie Triedy, ktoré Selektívne Vystavuje Slovník
Pretože ste chceli robiť niektoré slovník práci vo vnútri triedy, ale vystaviť ho von, išiel som celé prasa, a urobil môj triedy generic na <TKey, TValue>
tak, že to funguje so Slovníkmi akéhokoľvek druhu.
Tiež som robil to realizovať Zber Inicializácia Vzor , takže môžete spúšťať inštancie triedy rovnako ako to bolo slovník.
Ak chcete použiť Zber Inicializácia Vzor, vaša trieda musí urobiť, aby sa veci:
Realizovať IEnumerable
alebo IEnumerable<T>
(T
môže byť akýkoľvek typ, nie len typ ste zber - môžete dokonca len hodiť NotImplementedException
ak sa nechcete starať)
Patrí metóda, ktorá vyzerá ako public void Add (SomeType atLeastOneParameter)
. Môžete mať viac ako jeden preťaženiu Add
ak budete chcieť.
Takže, začnem s týmto (Všimnite si, že to náradie IEnumerable<T>
:
public partial class TestExposedDictionary<TKey, TValue> : IEnumerable<TValue>
{
private readonly Dictionary<TKey, TValue> _theDictionary = new Dictionary<TKey, TValue>();
public void Add(TKey key, TValue value)
{
_theDictionary.Add(key, value);
}
public IEnumerator<TValue> GetEnumerator()
{
foreach (var kvp in _theDictionary)
{
yield return kvp.Value;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
To je dosť, aby sa trieda väčšinou vyzerajú ako slovník (si asi chcete pridať nejaký spôsob, ako získať dáta, atď. Ale, to je len na vás (pravdepodobne chcieť mať indexer (na TKey
) a TryGetValue
.
Ale, poďme pridať niektoré ďalšie náhodné funkcie triedy (daj to na najvyššej úrovni v rozsahu triedy):
public int Count => _theDictionary.Count;
public IEnumerable<KeyValuePair<TKey, TValue>> GetKeyValuePairs()
{
foreach (var kvp in _theDictionary)
{
yield return kvp;
}
}
Ktoré vám umožní vidieť, ako veľa vecí, ktoré sú vo vašom slovníku a umožní iterovať cez položky (v KeyValuePairs
), že Slovník zbierok. Neváhajte pridať ďalšie funkcie.
Nakoniec, tento test...
public static void Test()
{
var testDict = new TestExposedDictionary<int, string> {
{1, "one" },
{5, "five" },
{8, "eight" },
{10, "ten" },
{105, "hundredFive" },
};
// I can call Add in the normal way as well:
testDict.Add(300, "threeHundred");
Console.WriteLine($"TestDict Count: {testDict.Count}");
foreach (string s in testDict)
{
Console.WriteLine(s);
}
}
Keď som sa spustiť tento kód, som si:
TestDict Count: 6
one
five
eight
ten
hundredFive
threeHundred
Rozdelenie to pomocou Čiastočné
Neviem, prečo chcete použiť partial class
. Zvyčajne je to vykonané dva kusy kódu, ktoré sú upravené/udržiavaný rôznych personas (typický dôvodu je pre Visual Studio templating/čarodejníckom mechanizmus na udržanie jednej strane partial class
a programátor ostatných.
Pravidlá sú celkom jednoduché, stačí vyhlásiť public partial class MyClass
v dvoch súborov. Dva súbory musia byť v rovnakom projektu (t. j. modul do rovnakej Montáž) a triedy musí byť v rovnakej názvov. Akonáhle to urobíte, len split (top-level rozsahu) kúsky cez dvoch partial class
vyhlásenia.
V tejto prípadoch, asi by som ich rozdeliť takto:
- Jedna z jednej strany, ja by som dal dve funkcie potrebné na vykonanie vyhlásený
IEnumerator<TValue>
:
public IEnumerator<TValue> GetEnumerator()
IEnumerator IEnumerable.GetEnumerator()
- Na druhej strane, ja by som dal všetko ostatné:
- Slovník vyhlásenie a intialization
- Ostatné stiahnuť:
public IEnumerable<KeyValuePair<TKey, TValue>> GetKeyValuePairs()
public int Count => _theDictionary.Count;
public void Add(TKey key, TValue value)